Fork me on GitHub
Kaldi 示例 # 标题

说话人自适应

陈代君 - 2022

摘要: 。

 

1. 语音识别中的泛化问题

在传统的机器学习中 ,为了能够推导出模型的泛化能力,总是假设模型的训练数据和真实场景的测试数据来自于同一个分布。如果测试集和训练集来自于不同的分布,则很可能出现模型在测试集上的表现相较于开发集 (与训练集同分布) 差很多。

在语音识别领域,由于如下的原因,

  • 不同的测试条件不能都被训练数据覆盖。例如,训练数据主要来自于朗读场景的语音识别模型如果应用在车载语音助手上,其识别率肯定会差很多。朗读场景和车载场景主要的差别有两个方面。首先,从语言模型的角度,朗读场景和车载场景下所使用的词汇是很不一样的,很多车载相关的专有名词很少甚至不会出现在朗读数据中。另外,从声学模型的角度,朗读场景相对车载环境更安静,车载场景中包含了例如车噪,胎噪,雨刮器产生的噪音等非语言相关的声音信号。
  • 训练数据中的说话人数量远小于语音识别系统的使用者。训练数据通常来自于少量的说话人录音,而使用中经常会有不同口音,性别,年龄的使用者。

语音识别将不同声学条件视为不同的说话人,所以把提高在训练与测试数据分布不一致情形下模型表现的方法统称为说话人自适应 (speaker adaptation)。

可能会导致训练模型的数据和真实场景下的测试数据差异很大。为了提高模型在未知场景下的识别率,可以从如下两个方面来进行改进。

  • 基于模型 (model-based) 的改进:针对不同的使用场景和说话人,对模型进行调整,使得新模型在给定的使用场景下表现得以提升。

  • 基于特征 (feature-based) 的改进:针对不同的使用场景和说话人,对语音特征进行调整,使得调整后的特征能够更好的匹配原有模型。

     

2. 问题的分类

在介绍具体的改进方法之前,本小节先按照不同的标准对说话人自适应问题进行分类。

首先按照测试数据是否含有标注进行分类。如果在语音识别的测试阶段,知道输入语音信号的文本,则称为有监督的自适应识别。否则,称为无监督的自适应识别。图 2-1 中展示了监督和无监督情形下的说话人自适应问题。

图 2-1 说话人自适应问题按测试数据有无标注进行分类。

其次按照优化方式进行分类。如果通过修改模型 P(W|O,θ) 的参数 θ 来提高在测试集上的识别率,则称为自适应 (adaptation),等价于前面提到的基于模型的改进。如果通过对输入的声学信号进行变换来提高模型在测试集上的识别率,则称为正则化 (normalization),等价于前面提到的基于特征的改进。

图 2-2 说话人自适应问题按优化方式进行分类。

最后按照识别过程的实时性进行分类。如果不要求实时返回识别结果,可以得到所有输入音频后再进行识别,则称为批处理 (batch) 自适应。如果要求实时返回识别结果,则称为增量式 (incremental) 自适应。

介绍完说话人自适应分类之后,根据声学模型的不同,本章分别介绍 GMM-HMM 声学模型的说话人自适应和 DNN-HMM 声学模型的自适应。

 

3. GMM-HMM 的说话人自适应

对于 GMM-HMM 系统,按照优化方式进行分类,类似地可以分为模型自适应和特征变换。

3.1 模型自适应

关于 GMM-HMM 系统的模型自适应,可以调整的参数包括 HMM 状态之间的转移概率,GMM 各分量上正态分布的均值向量和对角协方差矩阵,以及各分量的权重。由于 GMM-HMM 中,主要通过 GMM 来表征说话人的特征,所以模型自适应主要通过调整 GMM 中的各项参数来提高模型在测试集上的识别率。常用的模型自适应方法包含最大后验概率 (MAP: maximum a posterior) 和极大似然线性回归 (MLLR: maximum likelihood linear regression)。

3.1.1 MAP

MAP 方法属于有监督的自适应方法。首先,在进行模型自适应之前,需要准备说话人所对应的音频和标注文本。其次,对每一个音频以及标注文本 (Om,Wm),利用现有的模型进行状态级别的维特比对齐,得到帧与 HMM 状态的对齐关系 {(Otm,Stm)}t=1Tm,其中 Otm 表示语音信号序列 Om 的第 t 帧,Stm 表示第 t 帧所对应的 HMM 状态,m=1,,M。再次,对第 i 个 HMM 的第 j 个隐状态 sij , 收集并排序该说话人语音信号中所有对齐到该状态的帧,记为 {Otij}t=1Tij,其中 Tij 表示对齐到 sij 的帧的数量。最后,通过状态 sij 对应的 GMM 将 Otij 分配到具体的正态分布。这里的分配有两种方式,第一种方式是将 Otij 分配到概率最大的正态分布;第二种方式是以条件概率 P(Otij|μijk,Σijk)Otij 分配到第 k 个正态分布。为了方便,这里采用第一种方式,对于状态 sij 的第 k 个正态分布成分,收集并排序该说话人语音信号中所有对齐到该正态分布成分的帧,记为 {Otijk}t=1Tijk

图 3-1 给定说话人,对状态的 GMM 成分构造帧集合。

图 3-1 展示了给定说话人音频和标注文本 (Om,Wm) 之后,对状态 sij 的第 k 个正态分布成分构造帧集合 {Otijk}t=1Tijk

给定说话人的样本 {(Om,Wm)}m=1M , 对正态分布成分构造好帧集合之后,基于帧集合对该正态分布的均值向量进行调整,使得调整后的模型更好的拟合该说话人的声学特征。假设说话人无关(SI,speaker independent)模型中,状态 sij 的第 k 个正态分布成分为 N(μijkSI,ΣijkSI),且说话人相关(SD,speaker dependent)模型中均值向量 μijkSD 的先验分布为

(1)p(μijkSD)=N(μijkSI,Σijk)

条件分布为

(2)p({Otijk}t=1T|μijkSD,ΣijkSI)=Πt=1TN(Otijk|μijkSD,ΣijkSI)

利用 Bayes 公式,推导出如下后验分布

(3)p(μijkSD|{Otijk}t=1T,ΣijkSI)p({Otijk}t=1T|μijkSD,ΣijkSI)p(μijkSD)

极大化后验分布,得到说话人相关均值向量的后验估计如下,

(4)μ^ijkSD(l)=α(l)μ^ijkML(l)+(1α(l))μijkSI(l)

其中 μ^ijkML 表示均值向量的极大似然估计, α 表示插值系数。具体公式如下,

(5)μ^ijkML=1Tijkt=1TijkOtijk(6)α(l)=TijkΣijk(l)TijkΣijk(l)+ΣijkSI(l)

从公式 (4) 可知,MAP 的自适应方法将极大似然估计 μ^ijkML 和原始模型参数 μijkSI 加权平均之后的结果作为说话人相关的模型参数。对于状态 sij 的第 k 个正态分布成分, 如果对应的帧较少甚至没有帧与之对应,则经过 MAP 调整后的模型参数更接近原始模型参数 μijkSI;如果对应的帧较多,则经过 MAP 调整后的模型参数更接近极大似然估计 μ^ijkML,这表明仅用该说话人样本估计的模型参数已经是可靠的。

MAP 对模型各参数的调整是独立的,针对不同状态的正态分布成分对应帧的数量,采取不同的调整策略。虽然 MAP 方法很灵活,但是因为音素,状态和正态分布成分不能共享该说话人提供的信息,导致那些所属帧数量较少的正态分布成分极难进行更新。为了能够充分利用说话人提供的信息来更新模型的各参数,可以采用下面将要介绍的 MLLR 方法。

3.1.2 MLLR

假设原始模型参数可以通过某种变换之后,使得调整后的模型可以更好地拟合说话人声学特征。在均值上应用 MLLR,采用如下简单的线性变换,

(7)μijk=TμijkSI

其中 T 是一个与音素,状态和正态分布成分无关的方阵。MLLR 的目标是选择合适的 T 让说话人数据在调整后的模型下似然达到最大。

3.1.2.1 有监督情形

MLLR 方法可以应用在有监督的情形,也可以应用在无监督的情形。本小节先介绍有监督的情形,类似于 MAP 方法,给定说话人音频和标注文本 (Om,Wm) 之后,对状态 sij 的第 k 个正态分布成分构造帧集合 {Otij}t=1Tij。MLLR 的目标函数如下,

(8)L(T|{(Om,Wm)}m=1M)=m=1Mlogp(Om|Wm,T)(9)=i,jt=1Tijlogk=1Kijwijkp(Otij|TμijkSI,ΣijkSI)(10)=i,jt=1Tijlogk=1Kijwijk(2π)d2(detΣijkSI)12exp{12(OtijTμijkSI)T(ΣijkSI)1(OtijTμijkSI)}

其中 Kij 表示对应状态 sij 的 GMM 正态分布成分的数量,wijk 表示状态 sij 的 GMM 中第 k 个正态成分的权重。

3.1.2.2 无监督情形

MLLR 方法在无监督的情形,目标函数如下,

(11)L(T,{Wm}m=1M|{Om}m=1M)=m=1Mlogp(Om,Wm|T)(12)=m=1Mlog{p(Om|Wm,T)p(Wm)}

由于无监督情形下,{Wm}m=1M 是未知的,所以需要同时关于方阵 T{Wm}m=1M 将对数似然函数 L(T,{Wm}m=1M|{Om}m=1M) 进行极大化。

(13)T^,{W^m}m=1M=argmaxT,WmL(T,{Wm}m=1M}|{Om}m=1M)

但是同时关于两组参数进行优化,在实际中有很大的困难。因此实际中,通常采用类似于坐标下降 (coordinate descent) 的方法,分步求解方阵 T 和 文本 {Wm}m=1M

  1. 给定某说话人声学特征序列集合 {Om}m=1M, 利用已有的说话人无关模型识别出对应的文本 {W^m}m=1M

  2. 将样本 {(Om,W^m)}m=1M 带入目标函数 (12), 类似上面有监督的情形求出方阵 T^,即

    (14)T^=argmaxTm=1Mlog{p(Om|W^m,T)p(W^m)}(15)=argmaxTm=1Mlogp(Om|W^m,T)
  3. 利用 (15) 中 T^ ,调整当前模型参数,

    (16)μijk=T^μijk

    并返回步骤 1. 直到参数收敛或达到预设的最大迭代步数。

3.1.2.3 MLLR 的优化

综合上面 MLLR 的有监督和无监督情形,最终都需要求解 (10) 和 (15) 中相似的优化问题。因此有必要统一介绍求解优化问题的细节。具体的目标函数如下,

(17)m=1Mlogp(Om|Wm,T)(18)=i,jt=1Tijlogk=1Kijwijk(2π)d2(detΣijkSI)12exp{12(OtijTμijkSI)T(ΣijkSI)1(OtijTμijkSI)}

直接优化上面的目标函数会很困难,主要的原因是上式先求和再求对数,不能利用对数和指数互为逆运算的性质将整个目标函数转换为简单求和的形式。为了简化计算,类似 MAP 方法,将 Otij 分配到条件概率 P(Otij|μijkSI,ΣijkSI) 最大的正态分布成分,得到帧集合 {Otijk}t=1Tijk。于是 (18) 被如下近似

(19)i,j,kt=1Tijklog{1(2π)d2(detΣijkSI)12exp(12(OtijkTμijkSI)T(ΣijkSI)1(OtijkTμijkSI))}(20)=i,j,kt=1Tijk{12log((2π)ddetΣijkSI)12(OtijkTμijkSI)T(ΣijkSI)1(OtijkTμijkSI)}(21)=i,j,kt=1Tijk{12log((2π)ddetΣijkSI)12(OtijkTμijkSI)T(ΣijkSI)1(OtijkTμijkSI)}

极大化上面的目标函数,

(22)T^=argmaxTm=1Mlogp(Om|Wm,T)(23)=argmaxTi,j,kt=1Tijk12(OtijkTμijkSI)T(ΣijkSI)1(OtijkTμijkSI)

(23) 等价于线性回归问题下的加权最小二乘估计 (Weighted Least Square Estimator),上面的目标函数关于 T 求导可得,

(24)ijt=1TijkμijkSIId×d(ΣijkSI)1(TμijkSIOtijk)=0

其中 表示 Kronecker 乘积,进一步整理可得如下的方程,

(25)ijt=1Tijkdiag(μijkSI)(ΣijkSI)1T(μijkSI,,μijkSI)=ijt=1Tijkdiag(μijkSI)(ΣijkSI)1(Otijk,,Otijk)

求解上面的方程组可以得到 MLLR 自适应方阵 T^, 基于自适应方阵可以调整对应的 GMM 均值向量,使得模型更贴合说话人特征。

3.2 特征变换

除了前面介绍的基于模型的自适应之外,还可以通过对特征进行正则化使得调整之后的特征更好地拟合模型。

3.2.1 fMLLR

fMLLR (feature-based maximum likelihood linear regression) 对特定说话人的声音特征 Otijk 进行如下变换,

(26)(Otijk)=TOtijk

假设原始特征 Otijk 服从正态分布 N(μijkSI,ΣijkSI),则正则化之后的特征 (Otijk) 服从正态分布 N(TμijkSI,TΣijkSITT) 。如果 MLLR 中的均值向量和协方差矩阵采用如下类型的线性变换,则 MLLR 等价于 fMLLR。这也是对特征做线性变换叫做 fMLLR 的主要原因。

(27)μijk=TμijkSI(28)Σijk=TΣijkSITT

3.2.2 说话人自适应训练

前面介绍的自适应和正则化方法都是在说话人无关模型训练好之后,在识别阶段通过变换模型参数或者特征使得调整后的模型和说话人声学特征更好的匹配。但需要注意的是,在训练说话人无关模型的声学特征中仍然包含说话人相关的信息,即来自不同说话人的声学特征在统计意义上仍然不是统一地服从某个分布 (在 GMM-HMM 模型中使用 GMM )。为了减少说话人无关模型训练过程中由不同说话人的声学特征差异所带来的影响,说话人自适应训练 (SAT: Speaker Adaptive Training) 在训练模型过程中基于 fMLLR 将不同说话人的声学特征进行变换,使得变换后的特征能够统一的被某个分布进行刻画 (在 GMM-HMM 中使用 GMM)。基于变换之后的特征建立说话人无关的通用模型。

具体的说话人自适应训练的过程如下图所示,

图 3-1 说话人自适应训练流程图。

  1. 初始状态下,利用所有训练数据 (不区分说话人) 进行说话人无关的训练得到初始模型。
  2. 类似 MAP ,分别对每个说话人数据,利用当前模型进行 Viterbi 对齐之后,收集并排序该说话人语音信号中所有对齐到正态分布成分的帧,记为 {Otijk}t=1Tijk
  3. 对每个说话人,利用收集到的帧集合进行 fMLLR 训练,得到每个说话人的特征变换矩阵 Ti。并将对应说话人训练数据中的声学特征进行线性变换。
  4. 把所有说话人线性变换之后的数据收集起来,基于变换后的数据并利用当前模型进行初始化来训练说话人自适应的模型。
  5. 将 4. 中的模型替换到 2. 中的模型,依次迭代,直到迭代步数达到阈值或者收敛。

在识别过程中,我们需要如下的步骤利用说话人无关模型和说话人自适应模型来提高对于特定说话人的识别准确率。

  • 使用说话人无关模型进行识别,利用 Viterbi 对齐将识别结果与声学特征进行对齐,得到各正态成分的帧集合 {Otijk}t=1Tijk
  • 使用对齐后的数据估计该说话人的 fMLLR 变换矩阵,并在原始声学特征上应用变换矩阵得到 “剥离” 了说话人特性之后的特征。
  • 对变换后的特征,基于说话人自适应训练 (SAT) 后的模型进行识别。

 

4. DNN-HMM 的说话人自适应

4.1 基于模型的自适应

 

4.2 基于特征的自适应

 

5. Kaldi 实现

前面介绍了说话人自适应的理论部分,本小节来介绍 Kaldi 中的说话人自适应实现。Kaldi 中的说话人自适应主要包含 LDA + MLLT 是针对全局做的特征变换,而 SAT 是针对特定说话人的特征变换。

5.1 LDA + MLLT

MLLT 也被称为 STC (半绑定协方差)和 LDA 类似都是基于全局的特征变换,在 Kaldi Librispeech 示例脚本 steps/train_lda_mllt.sh 中实现了 LDA + MLLT 这类全局特征变换。

  • 根据对齐收集 LDA 统计量
  • 估计 LDA 投影矩阵
  • 基于 LDA 进行特征变换
  • 迭代更新 GMM 的参数

 

5.2 SAT

前面已经说明 SAT 是一种基于 fMLLR 的说话人自适应,主要通过对特定说话人的特征进行变换。 在 Kaldi Librispeech 脚本 steps/train_sat.sh 中实现了 SAT (fMLLR)。

  • 估计初始 fMLLR 矩阵
  • 基于 fMLLR 变换之后的特征管道
  • 迭代更新 GMM 的参数

 

Kaldi 示例

说话人自适应

陈代君 - 2022

摘要: 。

1. 语音识别中的泛化问题

在传统的机器学习中 ,为了能够推导出模型的泛化能力,总是假设模型的训练数据和真实场景的测试数据来自于同一个分布。如果测试集和训练集来自于不同的分布,则很可能出现模型在测试集上的表现相较于开发集 (与训练集同分布) 差很多。

在语音识别领域,由于如下的原因,

  • 不同的测试条件不能都被训练数据覆盖。例如,训练数据主要来自于朗读场景的语音识别模型如果应用在车载语音助手上,其识别率肯定会差很多。朗读场景和车载场景主要的差别有两个方面。首先,从语言模型的角度,朗读场景和车载场景下所使用的词汇是很不一样的,很多车载相关的专有名词很少甚至不会出现在朗读数据中。另外,从声学模型的角度,朗读场景相对车载环境更安静,车载场景中包含了例如车噪,胎噪,雨刮器产生的噪音等非语言相关的声音信号。
  • 训练数据中的说话人数量远小于语音识别系统的使用者。训练数据通常来自于少量的说话人录音,而使用中经常会有不同口音,性别,年龄的使用者。

语音识别将不同声学条件视为不同的说话人,所以把提高在训练与测试数据分布不一致情形下模型表现的方法统称为说话人自适应 (speaker adaptation)。

可能会导致训练模型的数据和真实场景下的测试数据差异很大。为了提高模型在未知场景下的识别率,可以从如下两个方面来进行改进。

  • 基于模型 (model-based) 的改进:针对不同的使用场景和说话人,对模型进行调整,使得新模型在给定的使用场景下表现得以提升。

  • 基于特征 (feature-based) 的改进:针对不同的使用场景和说话人,对语音特征进行调整,使得调整后的特征能够更好的匹配原有模型。

2. 问题的分类

在介绍具体的改进方法之前,本小节先按照不同的标准对说话人自适应问题进行分类。

首先按照测试数据是否含有标注进行分类。如果在语音识别的测试阶段,知道输入语音信号的文本,则称为有监督的自适应识别。否则,称为无监督的自适应识别。图 2-1 中展示了监督和无监督情形下的说话人自适应问题。



图 2-1 说话人自适应问题按测试数据有无标注进行分类。

其次按照优化方式进行分类。如果通过修改模型 $P(W|O,\theta)$ 的参数 $\theta$ 来提高在测试集上的识别率,则称为自适应 (adaptation),等价于前面提到的基于模型的改进。如果通过对输入的声学信号进行变换来提高模型在测试集上的识别率,则称为正则化 (normalization),等价于前面提到的基于特征的改进。



图 2-2 说话人自适应问题按优化方式进行分类。

最后按照识别过程的实时性进行分类。如果不要求实时返回识别结果,可以得到所有输入音频后再进行识别,则称为批处理 (batch) 自适应。如果要求实时返回识别结果,则称为增量式 (incremental) 自适应。

介绍完说话人自适应分类之后,根据声学模型的不同,本章分别介绍 GMM-HMM 声学模型的说话人自适应和 DNN-HMM 声学模型的自适应。

3. GMM-HMM 的说话人自适应

对于 GMM-HMM 系统,按照优化方式进行分类,类似地可以分为模型自适应和特征变换。

3.1 模型自适应

关于 GMM-HMM 系统的模型自适应,可以调整的参数包括 HMM 状态之间的转移概率,GMM 各分量上正态分布的均值向量和对角协方差矩阵,以及各分量的权重。由于 GMM-HMM 中,主要通过 GMM 来表征说话人的特征,所以模型自适应主要通过调整 GMM 中的各项参数来提高模型在测试集上的识别率。常用的模型自适应方法包含最大后验概率 (MAP: maximum a posterior) 和极大似然线性回归 (MLLR: maximum likelihood linear regression)。

3.1.1 MAP

MAP 方法属于有监督的自适应方法。首先,在进行模型自适应之前,需要准备说话人所对应的音频和标注文本。其次,对每一个音频以及标注文本 $(O^m, W^m)$,利用现有的模型进行状态级别的维特比对齐,得到帧与 HMM 状态的对齐关系 $\{(O^m_{t},S^m_{t})\}_{t=1}^{T_m}$,其中 $O_t^m$ 表示语音信号序列 $O^m$ 的第 $t$ 帧,$S_t^m$ 表示第 $t$ 帧所对应的 HMM 状态,$m=1,\dots,M$。再次,对第 $i$ 个 HMM 的第 $j$ 个隐状态 $s_{ij}$ , 收集并排序该说话人语音信号中所有对齐到该状态的帧,记为 $\{O_{t}^{ij}\}_{t=1}^{T_{ij}}$,其中 $T_{ij}$ 表示对齐到 $s_{ij}$ 的帧的数量。最后,通过状态 $s_{ij}$ 对应的 GMM 将 $O_{t}^{ij}$ 分配到具体的正态分布。这里的分配有两种方式,第一种方式是将 $O^{ij}_t$ 分配到概率最大的正态分布;第二种方式是以条件概率 $P(O^{ij}_t|\mu_{ijk},\Sigma_{ijk})$ 将 $O_t^{ij}$ 分配到第 $k$ 个正态分布。为了方便,这里采用第一种方式,对于状态 $s_{ij}$ 的第 $k$ 个正态分布成分,收集并排序该说话人语音信号中所有对齐到该正态分布成分的帧,记为 $\{O_{t}^{ijk}\}_{t=1}^{T_{ijk}}$。



图 3-1 给定说话人,对状态的 GMM 成分构造帧集合。

图 3-1 展示了给定说话人音频和标注文本 $(O^m, W^m)$ 之后,对状态 $s_{ij}$ 的第 $k$ 个正态分布成分构造帧集合 $\{O_{t}^{ijk}\}_{t=1}^{T_{ijk}}$。

给定说话人的样本 $\{(O^m, W^m)\}_{m=1}^M$ , 对正态分布成分构造好帧集合之后,基于帧集合对该正态分布的均值向量进行调整,使得调整后的模型更好的拟合该说话人的声学特征。假设说话人无关(SI,speaker independent)模型中,状态 $s_{ij}$ 的第 $k$ 个正态分布成分为 $N(\mu_{ijk}^{SI},\Sigma^{SI}_{ijk})$,且说话人相关(SD,speaker dependent)模型中均值向量 $\mu_{ijk}^{SD}$ 的先验分布为

条件分布为

利用 Bayes 公式,推导出如下后验分布

极大化后验分布,得到说话人相关均值向量的后验估计如下,

其中 $\hat{\mu}_{ijk}^{ML}$ 表示均值向量的极大似然估计, $\alpha$ 表示插值系数。具体公式如下,

从公式 ($\ref{formula_MAP_interp}$) 可知,MAP 的自适应方法将极大似然估计 $\hat{\mu}^{ML}_{ijk}$ 和原始模型参数 $\mu_{ijk}^{SI}$ 加权平均之后的结果作为说话人相关的模型参数。对于状态 $s_{ij}$ 的第 $k$ 个正态分布成分, 如果对应的帧较少甚至没有帧与之对应,则经过 MAP 调整后的模型参数更接近原始模型参数 $\mu_{ijk}^{SI}$;如果对应的帧较多,则经过 MAP 调整后的模型参数更接近极大似然估计 $\hat{\mu}^{ML}_{ijk}$,这表明仅用该说话人样本估计的模型参数已经是可靠的。

MAP 对模型各参数的调整是独立的,针对不同状态的正态分布成分对应帧的数量,采取不同的调整策略。虽然 MAP 方法很灵活,但是因为音素,状态和正态分布成分不能共享该说话人提供的信息,导致那些所属帧数量较少的正态分布成分极难进行更新。为了能够充分利用说话人提供的信息来更新模型的各参数,可以采用下面将要介绍的 MLLR 方法。

3.1.2 MLLR

假设原始模型参数可以通过某种变换之后,使得调整后的模型可以更好地拟合说话人声学特征。在均值上应用 MLLR,采用如下简单的线性变换,

其中 $\mathbf{T}$ 是一个与音素,状态和正态分布成分无关的方阵。MLLR 的目标是选择合适的 $\mathbf{T}$ 让说话人数据在调整后的模型下似然达到最大。

3.1.2.1 有监督情形

MLLR 方法可以应用在有监督的情形,也可以应用在无监督的情形。本小节先介绍有监督的情形,类似于 MAP 方法,给定说话人音频和标注文本 $(O^m, W^m)$ 之后,对状态 $s_{ij}$ 的第 $k$ 个正态分布成分构造帧集合 $\{O_{t}^{ij}\}_{t=1}^{T_{ij}}$。MLLR 的目标函数如下,

其中 $K_{ij}$ 表示对应状态 $s_{ij}$ 的 GMM 正态分布成分的数量,$w_{ijk}$ 表示状态 $s_{ij}$ 的 GMM 中第 $k$ 个正态成分的权重。

3.1.2.2 无监督情形

MLLR 方法在无监督的情形,目标函数如下,

由于无监督情形下,$\{W^m\}_{m=1}^{M}$ 是未知的,所以需要同时关于方阵 $\mathbf{T}$ 和 $\{W^m\}_{m=1}^{M}$ 将对数似然函数 $L(\mathbf{T},\{W^m\}_{m=1}^{M}|\{O^{m}\}_{m=1}^{M})$ 进行极大化。

但是同时关于两组参数进行优化,在实际中有很大的困难。因此实际中,通常采用类似于坐标下降 (coordinate descent) 的方法,分步求解方阵 $\mathbf{T}$ 和 文本 $\{W^m\}_{m=1}^M$。

  1. 给定某说话人声学特征序列集合 $\{O^m\}_{m=1}^{M}$, 利用已有的说话人无关模型识别出对应的文本 $\{\hat{W}^m\}_{m=1}^{M}$。

  2. 将样本 $\{(O^m,\hat{W}^m)\}_{m=1}^M$ 带入目标函数 $(\ref{mllr_unsup_obj})$, 类似上面有监督的情形求出方阵 $\hat{\mathbf{T}}$,即

  3. 利用 ($\ref{mllr_unsup_opt}$) 中 $\hat{\mathbf{T}}$ ,调整当前模型参数,

    并返回步骤 1. 直到参数收敛或达到预设的最大迭代步数。

3.1.2.3 MLLR 的优化

综合上面 MLLR 的有监督和无监督情形,最终都需要求解 ($\ref{mllr_sup_obj}$) 和 ($\ref{mllr_unsup_opt}$) 中相似的优化问题。因此有必要统一介绍求解优化问题的细节。具体的目标函数如下,

直接优化上面的目标函数会很困难,主要的原因是上式先求和再求对数,不能利用对数和指数互为逆运算的性质将整个目标函数转换为简单求和的形式。为了简化计算,类似 MAP 方法,将 $O_t^{ij}$ 分配到条件概率 $P(O^{ij}_t|\mu_{ijk}^{SI},\Sigma^{SI}_{ijk})$ 最大的正态分布成分,得到帧集合 $\{O_{t}^{ijk}\}_{t=1}^{T_{ijk}}$。于是 ($\ref{mllr_opt_gmm}$) 被如下近似

极大化上面的目标函数,

($\ref{mllr_opt_gauss}$) 等价于线性回归问题下的加权最小二乘估计 (Weighted Least Square Estimator),上面的目标函数关于 $\mathbf{T}$ 求导可得,

其中 $\otimes $ 表示 Kronecker 乘积,进一步整理可得如下的方程,

求解上面的方程组可以得到 MLLR 自适应方阵 $\hat{\mathbf{T}}$, 基于自适应方阵可以调整对应的 GMM 均值向量,使得模型更贴合说话人特征。

3.2 特征变换

除了前面介绍的基于模型的自适应之外,还可以通过对特征进行正则化使得调整之后的特征更好地拟合模型。

3.2.1 fMLLR

fMLLR (feature-based maximum likelihood linear regression) 对特定说话人的声音特征 $O^{ijk}_t$ 进行如下变换,

假设原始特征 $O_{t}^{ijk}$ 服从正态分布 $N(\mu_{ijk}^{SI}, \Sigma_{ijk}^{SI})$,则正则化之后的特征 $(O_{t}^{ijk})^{’}$ 服从正态分布 $N(\mathbf{T}\mu^{SI}_{ijk}, \mathbf{T}\Sigma_{ijk}^{SI}\mathbf{T}^{T})$ 。如果 MLLR 中的均值向量和协方差矩阵采用如下类型的线性变换,则 MLLR 等价于 fMLLR。这也是对特征做线性变换叫做 fMLLR 的主要原因。

3.2.2 说话人自适应训练

前面介绍的自适应和正则化方法都是在说话人无关模型训练好之后,在识别阶段通过变换模型参数或者特征使得调整后的模型和说话人声学特征更好的匹配。但需要注意的是,在训练说话人无关模型的声学特征中仍然包含说话人相关的信息,即来自不同说话人的声学特征在统计意义上仍然不是统一地服从某个分布 (在 GMM-HMM 模型中使用 GMM )。为了减少说话人无关模型训练过程中由不同说话人的声学特征差异所带来的影响,说话人自适应训练 (SAT: Speaker Adaptive Training) 在训练模型过程中基于 fMLLR 将不同说话人的声学特征进行变换,使得变换后的特征能够统一的被某个分布进行刻画 (在 GMM-HMM 中使用 GMM)。基于变换之后的特征建立说话人无关的通用模型。

具体的说话人自适应训练的过程如下图所示,



图 3-1 说话人自适应训练流程图。

  1. 初始状态下,利用所有训练数据 (不区分说话人) 进行说话人无关的训练得到初始模型。
  2. 类似 MAP ,分别对每个说话人数据,利用当前模型进行 Viterbi 对齐之后,收集并排序该说话人语音信号中所有对齐到正态分布成分的帧,记为 $\{O_{t}^{ijk}\}_{t=1}^{T_{ijk}}$。
  3. 对每个说话人,利用收集到的帧集合进行 fMLLR 训练,得到每个说话人的特征变换矩阵 $\mathbf{T}_i$。并将对应说话人训练数据中的声学特征进行线性变换。
  4. 把所有说话人线性变换之后的数据收集起来,基于变换后的数据并利用当前模型进行初始化来训练说话人自适应的模型。
  5. 将 4. 中的模型替换到 2. 中的模型,依次迭代,直到迭代步数达到阈值或者收敛。

在识别过程中,我们需要如下的步骤利用说话人无关模型和说话人自适应模型来提高对于特定说话人的识别准确率。

  • 使用说话人无关模型进行识别,利用 Viterbi 对齐将识别结果与声学特征进行对齐,得到各正态成分的帧集合 $\{O_{t}^{ijk}\}_{t=1}^{T_{ijk}}$。
  • 使用对齐后的数据估计该说话人的 fMLLR 变换矩阵,并在原始声学特征上应用变换矩阵得到 “剥离” 了说话人特性之后的特征。
  • 对变换后的特征,基于说话人自适应训练 (SAT) 后的模型进行识别。

4. DNN-HMM 的说话人自适应

4.1 基于模型的自适应

4.2 基于特征的自适应

5. Kaldi 实现

前面介绍了说话人自适应的理论部分,本小节来介绍 Kaldi 中的说话人自适应实现。Kaldi 中的说话人自适应主要包含 LDA + MLLT 是针对全局做的特征变换,而 SAT 是针对特定说话人的特征变换。

5.1 LDA + MLLT

MLLT 也被称为 STC (半绑定协方差)和 LDA 类似都是基于全局的特征变换,在 Kaldi Librispeech 示例脚本 steps/train_lda_mllt.sh 中实现了 LDA + MLLT 这类全局特征变换。

1
2
3
steps/train_lda_mllt.sh --cmd "$train_cmd" \
--splice-opts "--left-context=3 --right-context=3" 2500 15000 \
data/train_10k data/lang_nosp exp/tri1_ali_10k exp/tri2b
  • 根据对齐收集 LDA 统计量
1
2
3
4
ali-to-post "ark:gunzip -c $alidir/ali.JOB.gz|" ark:- \| \
weight-silence-post 0.0 $silphonelist $alidir/final.mdl ark:- ark:- \| \
acc-lda --rand-prune=$randprune $alidir/final.mdl "$splicedfeats" ark,s,cs:- \
$dir/lda.JOB.acc || exit 1;
  • 估计 LDA 投影矩阵
1
2
est-lda --write-full-matrix=$dir/full.mat --dim=$dim $dir/0.mat $dir/lda.*.acc \
2>$dir/log/lda_est.log || exit 1;
  • 基于 LDA 进行特征变换
1
feats="$splicedfeats transform-feats $dir/$x.mat ark:- ark:- |"
  • 迭代更新 GMM 的参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
while [ $x -lt $num_iters ]; do
gmm-align-compiled $scale_opts --beam=$beam --retry-beam=$retry_beam --careful=$careful "$mdl" \
"ark:gunzip -c $dir/fsts.JOB.gz|" "$feats" \
"ark:|gzip -c >$dir/ali.JOB.gz" || exit 1;
echo "$0: Estimating MLLT"
$cmd JOB=1:$nj $dir/log/macc.$x.JOB.log \
ali-to-post "ark:gunzip -c $dir/ali.JOB.gz|" ark:- \| \
weight-silence-post 0.0 $silphonelist $dir/$x.mdl ark:- ark:- \| \
gmm-acc-mllt --rand-prune=$randprune $dir/$x.mdl "$feats" ark:- $dir/$x.JOB.macc \
|| exit 1;
# 估计 MLLT 矩阵
est-mllt $dir/$x.mat.new $dir/$x.*.macc 2> $dir/log/mupdate.$x.log || exit 1;
gmm-transform-means $dir/$x.mat.new $dir/$x.mdl $dir/$x.mdl \
2> $dir/log/transform_means.$x.log || exit 1;
# 合并 LDA 和 MLLT 矩阵
compose-transforms --print-args=false $dir/$x.mat.new $dir/$cur_lda_iter.mat $dir/$x.mat || exit 1;
rm $dir/$x.*.macc
# 重新定义特征变换
feats="$splicedfeats transform-feats $dir/$x.mat ark:- ark:- |"
cur_lda_iter=$x

# 重新估计 GMM 的参数
if [ $stage -le $x ]; then
$cmd JOB=1:$nj $dir/log/acc.$x.JOB.log \
gmm-acc-stats-ali $dir/$x.mdl "$feats" \
"ark,s,cs:gunzip -c $dir/ali.JOB.gz|" $dir/$x.JOB.acc || exit 1;
$cmd $dir/log/update.$x.log \
gmm-est --write-occs=$dir/$[$x+1].occs --mix-up=$numgauss --power=$power \
$dir/$x.mdl "gmm-sum-accs - $dir/$x.*.acc |" $dir/$[$x+1].mdl || exit 1;
rm $dir/$x.mdl $dir/$x.*.acc $dir/$x.occs
fi
[ $x -le $max_iter_inc ] && numgauss=$[$numgauss+$incgauss];
x=$[$x+1];
done

5.2 SAT

前面已经说明 SAT 是一种基于 fMLLR 的说话人自适应,主要通过对特定说话人的特征进行变换。 在 Kaldi Librispeech 脚本 steps/train_sat.sh 中实现了 SAT (fMLLR)。

1
2
3
# Train tri3b, which is LDA+MLLT+SAT on 10k utts
steps/train_sat.sh --cmd "$train_cmd" 2500 15000 \
data/train_10k data/lang_nosp exp/tri2b_ali_10k exp/tri3b
  • 估计初始 fMLLR 矩阵
1
2
3
4
5
ali-to-post "ark:gunzip -c $alidir/ali.JOB.gz|" ark:- \| \
weight-silence-post $silence_weight $silphonelist $alidir/final.mdl ark:- ark:- \| \
gmm-est-fmllr --fmllr-update-type=$fmllr_update_type \
--spk2utt=ark:$sdata/JOB/spk2utt $alidir/final.mdl "$sifeats" \
ark:- ark:$dir/trans.JOB || exit 1;
  • 基于 fMLLR 变换之后的特征管道
1
feats="$sifeats transform-feats --utt2spk=ark:$sdata/JOB/utt2spk ark,s,cs:$dir/trans.JOB ark:- ark:- |"
  • 迭代更新 GMM 的参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
while [ $x -lt $num_iters ]; do
echo Pass $x
if echo $realign_iters | grep -w $x >/dev/null && [ $stage -le $x ]; then
echo Aligning data
mdl="gmm-boost-silence --boost=$boost_silence `cat $lang/phones/optional_silence.csl` $dir/$x.mdl - |"
$cmd JOB=1:$nj $dir/log/align.$x.JOB.log \
gmm-align-compiled $scale_opts --beam=$beam --retry-beam=$retry_beam --careful=$careful "$mdl" \
"ark:gunzip -c $dir/fsts.JOB.gz|" "$feats" \
"ark:|gzip -c >$dir/ali.JOB.gz" || exit 1;
fi

if echo $fmllr_iters | grep -w $x >/dev/null; then
if [ $stage -le $x ]; then
echo Estimating fMLLR transforms
# We estimate a transform that's additional to the previous transform;
# we'll compose them.
$cmd JOB=1:$nj $dir/log/fmllr.$x.JOB.log \
ali-to-post "ark:gunzip -c $dir/ali.JOB.gz|" ark:- \| \
weight-silence-post $silence_weight $silphonelist $dir/$x.mdl ark:- ark:- \| \
gmm-est-fmllr --fmllr-update-type=$fmllr_update_type \
--spk2utt=ark:$sdata/JOB/spk2utt $dir/$x.mdl \
"$feats" ark:- ark:$dir/tmp_trans.JOB || exit 1;
for n in `seq $nj`; do
! ( compose-transforms --b-is-affine=true \
ark:$dir/tmp_trans.$n ark:$cur_trans_dir/trans.$n ark:$dir/composed_trans.$n \
&& mv $dir/composed_trans.$n $dir/trans.$n && \
rm $dir/tmp_trans.$n ) 2>$dir/log/compose_transforms.$x.log \
&& echo "$0: Error composing transforms" && exit 1;
done
fi
feats="$sifeats transform-feats --utt2spk=ark:$sdata/JOB/utt2spk ark:$dir/trans.JOB ark:- ark:- |"
cur_trans_dir=$dir
fi

if [ $stage -le $x ]; then
$cmd JOB=1:$nj $dir/log/acc.$x.JOB.log \
gmm-acc-stats-ali $dir/$x.mdl "$feats" \
"ark,s,cs:gunzip -c $dir/ali.JOB.gz|" $dir/$x.JOB.acc || exit 1;
[ `ls $dir/$x.*.acc | wc -w` -ne "$nj" ] && echo "$0: Wrong #accs" && exit 1;
$cmd $dir/log/update.$x.log \
gmm-est --power=$power --write-occs=$dir/$[$x+1].occs --mix-up=$numgauss $dir/$x.mdl \
"gmm-sum-accs - $dir/$x.*.acc |" $dir/$[$x+1].mdl || exit 1;
rm $dir/$x.mdl $dir/$x.*.acc
rm $dir/$x.occs
fi
[ $x -le $max_iter_inc ] && numgauss=$[$numgauss+$incgauss];
x=$[$x+1];
done
序列区分性训练 # 标题

序列区分性训练

陈代君 - 2021

摘要:前面的章节介绍了基于极小化交叉熵 (CE) 准则的声学模型训练。本章在此基础上介绍基于极大化互信息准则的声学模型序列区分性训练,包括极大互信息准则引入的动机和优化算法。同时介绍了在实现过程中,使用的基于词格和不基于词格的两种策略。进一步,本章还介绍了一些其他序列区分性准则,同时给出了优化算法及其推导过程。最后,介绍了 Kaldi 中序列区分性准则的示例,帮助读者更好的理解序列区分性准则。

 

1. 生成式模型的缺陷

语音识别的本质可以用下面的公式进行描述,

(1)maxWP(W|O)

其中 O=O1,,OT 表示观测到的语音信号序列,W=W1,,WN 表示词序列。传统的语音识别进一步分解上面的公式 (1)

(2)maxWP(W|O)=maxWP(O|W,θ)P(W)P(O)

其中,分母上的 P(O) 在声音信号给定后是不需要考虑的常量;分子上的 P(W) 表示语言模型, P(O|W,θ) 表示声学模型。 声学模型的参数 θ 通常基于训练集 {(Wm,Om)}m=1M 进行估计,例如极大似然估计。

为了能够理解极大似然估计的缺陷,先回顾一下极大似然估计。统计的频率学派将参数 θ 视为未知常量,在模型类型给定的基础上,基于训练数据在参数空间中寻找使得似然函数最大的 θ,记为 θ^MLE, 这个值就是 θ 的极大似然估计。求极大似然估计的过程中,需要给定模型类型,例如在语音识别中,通常假定模型为 GMM-HMM 或者 DNN-HMM。因为真实的语音信号并不是由 HMM 生成的,所以在 GMM-HMM 模型假设的基础上根据似然最大准则找到的最优参数并不一定使得 WER 或者 SER 最小。换句话说,似然极大并不能保证语音识别的错误率最小。

实际上,P(O|W,θ) 是描述数据分布的生成式模型 (generative model),即给定词序列,假设观测到的语音信号服从 GMM-HMM 或者 DNN-HMM 模型描述的分布。不同于生成式模型,区分性模型 (discriminative model,也称为判别式模型) 直接对给定观测数据条件下真实类别的分布进行建模,即对 P(W|O,θ) 进行建模。

 

2. MMI 估计

2.1 MMI 估计的基本原理

因为语音信号随机变量 O 和词序列随机变量 W 的互信息如下,

(3)I(O,W)=ElogP(O,W)P(O)P(W)(4)=H(W)H(W|O)

其中, H(W) 表示词序列随机变量的熵,H(W|O) 表示条件为语音信号随机变量的条件熵。

因为 H(W) 与待估计模型的参数无关,所以极大化互信息 I(O,W) 等价于极小化条件熵 H(W|O)。极小化条件熵意味着语音信号随机变量 O 给定条件下,极小化词序列随机变量 W 的不确定性。 又因为下面的互信息表达式 (5) 中,P(W) 不含声学模型待估参数,故极大化互信息等价于极大化 (5) 右边的第一项。

(5)I(O,W)=ElogP(O,W)P(O)ElogP(W)

基于训练集 S={(Wm,Om)}m=1M ,可以训练极大似然声学模型 (GMM-HMM, 或 DNN-HMM) 。利用极大似然声学模型对训练集进行状态级别的对齐后,可以得到对齐后的训练集 Saligned={(Wm,Om,Sm)}m=1M,其中 Wm=W1m,,WNmm,Om=O1m,,OTmm,Sm=S1m,,STmm。极大互信息 (MMI, maximum mutual information) 准则公式如下,

(6)JMMI(S|θ)=m=1MJMMI(Wm,Om|θ)(7)=m=1MlogP(Wm|Om,θ)(8)=m=1MlogP(Om|Wm,θ)P(Wm)WP(Om|W,θ)P(W)(9)=m=1MlogP(Om|Sm,θ)P(Wm)WP(Om|S,θ)P(W)

其中,分母上的 W 表示给定语音信号 Om 条件下可能的词序列。例如,当正确的词序列为 "动手学语音识别", “冻手雪余音识别” 可以作为一个可能的词序列。

为了极大化 MMI 的目标函数,可以增加分子或者减小分母 (MMI 的目标函数可以转化为似然函数乘积的形式)。 增加分子意味着提高给定正确词序列条件下观测语音信号的概率,即声学模型的概率。减小分母等同于减少错误词序列条件下观测语音的概率。综合起来看,增加正确词序列的概率和减少错误词序列的概率使得最终的 MMI 估计具有更好的区分性,最终经过区分性训练后的声学模型能够更好地识别出正确的词序列。

2.2 MMI 训练算法推导

2.2.1 GMM-HMM

理解了 MMI 的基本原理之后,还需要能够快速寻找 MMI 目标函数的优化算法。 相对于极大似然目标函数的优化来说, MMI 的目标函数的优化是更难的。总的来说,有两类算法被用来优化 MMI 的目标函数。第一类是基于梯度的优化算法,例如 GPD (Generalized Probabilistic Descent)。 第二类是更接近 EM 算法的 EB (Extended Baum-Welch) 算法。相对于基于梯度的优化算法,EB 算法具有下面的优势。

  • EB 算法利用辅助函数从理论上确保了算法的收敛和高效。
  • EB 算法可以处理 HMM 中每个状态到其他状态的转移概率求和等于 1 以及 GMM 各分量权重求和等于 1 这两个等式约束条件。

下面是 GMM-HMM 模型的 EB 算法第 k+1 步的迭代公式, 证明的细节参考附录。

(10)μjm(k+1)=θjmnum(O)θjmden(O)+Djmμjm(k)γjmnumγjmden+Djm(11)(σ2)jm(k+1)=θjmnum(O2)θjmden(O2)+Djm((σ2)jm(k)+(μjm(k))2)γjmnumγjmden+Djm(μjm(k+1))2

其中,

(12)fnum(θ)=i=1NlogPθ(Oi|Si)P(Si)=i=1Nlogaifainum(θ)(13)fden(θ)=i=1NlogjPθ(Oi|Sij)Pθ(Sij)=i=1Nlogjaijfaijden(θ)
(14)γijmnum(t)=ai(t)=jfainum(θ(k))yfynum(θ(k)),γijmden(t)=lail(t)=jfailden(θ(k))yfyden(θ(k))(15)γjmnum=i=1Nt=1Tiγijmnum(t),γjmden=i=1Nt=1Tiγijmden(t)(16)θjmnum(O)=i=1Nt=1Tiγijmnum(t)Oi(t),θjmden(O)=i=1Nt=1Tiγijmden(t)Oi(t)(17)θjmnum(O2)=i=1Nt=1Tiγijmnum(t)Oi2(t),θjmden(O2)=i=1Nt=1Tiγijmden(t)Oi2(t)

上面的参数更新公式中,γijmden(t) 的计算需要遍历所有可能的词序列。因l为所有可能的词序列数量巨大,所以直接通过上面的更新公式来求解参数的 MMI 估计几乎是不可能的。 为了克服这个计算上的困难,下面两个小节将介绍两种解决方法。

2.2.2 DNN-HMM

不同于传统的 GMM-HMM,DNN-HMM 的区分性训练主要采用了基于随机梯度下降的优化算法。假设 ymtL=softmax(zmtL) 是 DNN 的输出,则 MMI 的目标函数关于模型参数 θ 的梯度可以通过如下公式计算,

(18)θJMMI(S|θ)=m=1Mt=1TmzmtLJMMI(Wm,Om|θ)zmtLθ

上面计算梯度的公式 (18) 中,zmtLθ 只跟DNN的网络结构相关,和目标函数无关,所以仅关心目标函数关于 zmtL 的梯度计算。为了方便,记 emtL=(emtL(1),,emtL(nL))T,其中 emtL(i)=zmtL(i)JMMI(Wm,Om|θ)nL 表示 DNN 输出层 (第 L 层) 的节点个数。

(19)emtL(i)=rJMMI(Wm,Om|θ)logP(Otm|Stm=r)logP(Otm|Stm=r)zmtL(i)(20)=r(1(Stm=r)W{W|St=r}P(Om|S,θ)P(W)WlogP(Om|S,θ)P(W))logP(Stm=r|Otm)zmtL(i)(21)=r(1(Stm=r)γmtden(r))logymtL(r)zmtL(i)(22)=1(Stm=i)γmtden(i)

其中,1() 表示示性函数,如果自变量内条件成立,取值为 1,否则为 0;

(23)γmtden(r)=W{W|St=r}P(Om|S,θ)P(W)WP(Om|S,θ)P(W)

证明见附录 7.2

 

2.3 Lattice-based MMI

为了加速 MMI 的计算量,早期的工作主要集中在使用 N-best 列表来近似 MMI 分母中所有可能词序列的集合。但是对于非常长的词序列,LM 计算出来的概率都接近于零,导致 N-best 中存储的备选词序列不能很好地近似分母所需的词序列集合 [Chow, 1990] 。另一种逼近 MMI 分母词序列的方案中,对每一个训练词序列生成一个 Lattice(词格),该 Lattice 将会被应用到 MMI 训练且在迭代过程不会被更新 [Povey, 2003]。

Lattice-based MMI 的具体实现步骤如下,


实现步骤

  1. 分子部分 Lattice 的构造:基于极大似然准则训练好 GMM-HMM(或基于 CE 准则训练好 DNN-HMM 模型),将训练好的模型应用到正确标准的词序列和音频信号序列上进行状态级别的对齐并生成正确词序列对应的 Lattice。

  2. 分母部分 Lattice 的构造: 利用 unigram 语言模型构建出 HCLG, 识别所有的训练例子 (Oi,Wi) 并保留识别过程中的 Lattice, i=1,,N。 尽管在 [Povey, 2003] 文章中,主要利用 bigram 语言模型构建 HCLG,但是论文也提到利用 unigram 语言模型构建 HCLG 会得到更好的实验结果。

  3. Lattice-based MMI 的迭代训练: 对于一个训练样本 (Oi,Wi)

    • 基于 1. 中构造的分子 Lattice, 利用 unigram 语言模型得到正确路径的概率并计算 γijmnum 的前向和后向概率。
    • 基于 2. 中构造的分母 Lattice, 构造正确路径对应的竞争路径集合,并利用 unigram 语言模型计算该竞争路径的概率,类似分子部分计算每条竞争路径的概率后求和得到 γijmden
    • 迭代更新模型参数至收敛,得到参数的 MMI 估计。

上面的实现步骤中,利用两个不同的模型分别对分子和分母部分构建分子 Lattice 以及分母 Lattice。其中分母 Lattice 的构造, 利用了由简单的 unigram 语言模型组成的 HCLG 有限状态转移图。在 MMI 的迭代更新过程中,分母和分子部分的计算都利用了 unigram 语言模型计算路径的概率。

下面的表格总结了 [Povey, 2003] 中报告的 Lattice-based MMI 训练过程中的各方面影响,

 结论解释
区分性训练中的语言模型unigram 优于 bigram 和 zerogram (无语言模型) 。尽管在某些测试集上,zerogram 模型或者按比例缩小的 unigram 模型优于 unigram, 但是会增加常用词的错误。
重新生成 Lattice在训练 MMI 的过程中不需要更新 Lattice。尽管在 MMI 的训练过程中,基于最新模型重新生成 Lattice 或对齐有最多 0.3% 的绝对 WER 提升,但是由于较高的计算复杂度,所以并不推荐在训练过程中更新 Lattice或对齐。
Lattice 的大小存在一个合适的阈值,使得在不大幅减小最终 MMI 估计识别精度的前提下,可以减小 Lattice 的复杂度。若备选路径 p 满足 logP(p)/maxp{logP(p)}<,则对该路径进行剪枝。实验结果表明,阈值取100 时,词错误率减小量不超过 0.2%。

 

3. 区分性准则

3.1 区分性准则的统一形式

除 MMI 目标函数 (6) 之外,区分性训练还可以使用许多其他的目标函数。实际上,这些区分性训练所使用的目标函数都基本符合如下的统一形式 (25)

(24)Jseq_uniform(S|θ)=m=1MJseq_uniform(Wm,Om|θ)(25)=m=1MJseq_uniformnum(Wm,Om|θ)Jseq_uniformden(Wm,Om|θ)

统一形式 (25) 关于给定样本 (Wm,Om) 由分子和分母两部分组成。其分子上的 Jseq_uniformnum() 通常由表示正确词序列 Wm 的词格计算;分母上的 Jseq_uniformden() 通常由表示备选词序列 W 的词格计算。目标函数 Jseq_uniform(S|θ) 关于 θ 的梯度如下,

(26)θJseq_uniform(S|θ)=m=1Mt=1TmzmtLJseq_uniform(Wm,Om|θ)zmtLθ

其中 zmtLθ 和目标函数无关,只和使用的 DNN 网络结构相关。因此只需要考虑

(27)emtL(i)=zmtL(i)Jseq_uniform(Wm,Om|θ)(28)=rJseq_uniform(Wm,Om|θ)logP(Otm|Stm=r)logP(Otm|Stm=r)zmtL(i)(29)=r(γmtnum(r)γmtden(r))×((logP(Stm=r|Otm)logP(Stm=r)+logP(Otm))zmtL(i))(30)=r(γmtnum(r)γmtden(r))×logP(Stm=r|Otm)zmtL(i)(31)=r(γmtnum(r)γmtden(r))1P(Stm=r|Otm)P(Stm=r|Otm)zmtL(i)(32)=r(γmtnum(r)γmtden(r))(δirP(Stm=i|Otm))(33)=γmtnum(i)γmtden(i)

不同目标函数梯度的区别主要出现在 γmtnum(i) 以及 γmtden(i) 的计算上。接下来将统一的公式应用到不同的目标函数,同时给出对应的梯度。

3.2 scaled MMI

在 MMI 的目标函数中,分子和分母部分的词序列概率通常采用简单的 unigram 语言模型来近似,因为 unigram 模型忽略了词与词之间的相关性,所以导致备选词序列集合中概率高的词序列数量较少。最终导致 MMI 的目标函数不需要怎么调整声学模型参数就可以达到较大值, 但是却没有提高声学模型对于混淆路径的区分能力。为了解决混淆路径较少的问题,引入如下的 scaled MMI 目标函数,

(34)Jscaled_MMI(S|θ)=m=1MJscaled_MMI(Wm,Om|θ)(35)=m=1MlogP(Om|Wm,θ)P(Wm)αWP(Om|W,θ)P(W)α(36)=m=1MlogP(Om|Sm,θ)P(Wm)αWP(Om|S,θ)P(W)α

其中 α 被称为尺度因子 (scale factor),0<α<1

加入尺度因子之后,能够缩小备选词序列集合中词序列语言模型概率之间的差异,从而增加混淆路径的数量。使得最大化 scaled MMI 目标函数能够得到更具区分性的声学模型 P(Om|Wm,θ)

图 3-1 尺度因子对词序列概率的作用

为了直观说明尺度因子 α 的作用,图 3-1 给出了四个不同的尺度因子条件下词序列概率 P(W)α 的变化。 假设 P(W1)=0.9,P(W2)=0.8,两条红色的水平虚线和纵轴的交点间距表示 α=1 时两个词序列概率的差;而两条蓝色的水平虚线和纵轴的交点间距表示 α=0.25 时两个词序列概率的差。从图 3-1 中可以看到,蓝色的交点间距明显小于红色的交点间距,所以应用更小的尺度因子可以减小词序列概率间的差异,从而增加混淆路径的数量。

在文献 [] 中,scaled MMI 的尺度因子 α 在目标函数分子和分母上的声学模型上。将尺度因子 α 放到声学模型或者语言模型的目标是相似的,都是为了增加混淆路径的数量。不同之处在于,如果将尺度因子 α 放到语言模型上,减小 α 会增加混淆路径的数量;如果将尺度因子 α 放到声学模型上,减小 α 会减少混淆路径的数量。由于将 α 放到声学模型或语言模型上没有本质区别,同时将 α 放到语言模型上会得到形式上与 MMI 相同的梯度表达式 (40),所以本书将 scaled MMI 的尺度因子 α 放到语言模型上。

因为 scaled MMI 和 MMI 的目标函数仅在分子和分母上的语言模型有所不同,所以可以类似地求出 scaled MMI 目标函数关于参数 θ 的梯度。这里仅给出 emtL(i)=zmtL(i)Jscaled_MMI(Wm,Om|θ) 的计算公式,

(37)emtL(i)=rJscaled_MMI(Wm,Om|θ)logP(Otm|Stm=r)logP(Otm|Stm=r)zmtL(i)(38)=r(1(Stm=r)W{W|St=r}P(Om|S,θ)P(W)αWlogP(Om|S,θ)P(W)α)logP(Stm=r|Otm)zmtL(i)(39)=r(1(Stm=r)γmtden(r))logymtL(r)zmtL(i)(40)=1(Stm=i)γmtden(i)

其中,

(41)γmtden(r)=W{W|St=r}P(Om|S,θ)P(W)αWP(Om|S,θ)P(W)α

3.3 BMMI

基于 scaled MMI 目标函数,如果能够提升声学模型对于包含较多错误的路径与正确路径之间的区分度,就可以减少最终识别结果中的错误率。基于这种想法,对 scaled MMI 目标函数 (36) 分母上包含错误较多的路径给予更高的权重,提出了增强的 MMI (BMMI, Boosted MMI),其目标函数如下,

(42)JBMMI(S|θ)=m=1MJBMMI(Wm,Om|θ)(43)=m=1MlogP(Om|Wm,θ)P(Wm)αWP(Om|W,θ)P(W)αexp{bA(W,Wm)}(44)=m=1MlogP(Om|Sm,θ)P(Wm)αWP(Om|S,θ)P(W)αexp{bA(W,Wm)}

其中 α 是尺度因子,b 是非负的增强因子 (boosting factor),A(Wm,W) 是正确文本 Wm 和备选文本 W 之间的匹配程度度量,可以从词,音素和状态三个层面计算。例如考虑音素层面的匹配程度,常用已训练好的 GMM-HMM 或者 DNN-HMM 把音频信号 OmWm/ W 分别进行帧-音素级别的对齐,然后统计两个帧-音素对齐中结果相同的帧数。WmW 匹配程度越高, 该备选词序列 W 的重要度越低;反之 WmW 匹配程度越低,该备选词序列 W 的重要度越高。最大化 BMMI 目标函数 (44),匹配程度较低的备选词序列相对于匹配程度较高的备选词序列来说,声学模型 Pθ(Oi|Wij) 的取值会变小。这就使得经过序列区分训练后的声学模型更倾向于选择贴近正确词序列的备选答案。

对比 scaled MMI 的目标函数,BMMI 仅在分母上的求和号中增加了增强系数 (boosting term) exp{bA(W,Wm)},所以这里仅给出 emtL(i)=zmtL(i)JBMMI(Wm,Om|θ) 的计算公式,

(45)emtL(i)=rJBMMI(Wm,Om|θ)logP(Otm|Stm=r)logP(Otm|Stm=r)zmtL(i)(46)=r(1(Stm=r)W{W|St=r}P(Om|S,θ)P(W)αexp{bA(W,Wm)}WlogP(Om|S,θ)P(W)αexp{bA(W,Wm)})logP(Stm=r|Otm)zmtL(i)(47)=r(1(Stm=r)γmtden(r))logymtL(r)zmtL(i)(48)=1(Stm=i)γmtden(i)

其中,

(49)γmtden(r)=W{W|St=r}P(Om|S,θ)P(W)αexp{bA(W,Wm)}WP(Om|S,θ)P(W)αexp{bA(W,Wm)}

为了能够快速地计算 BMMI 目标函数的梯度,需要能够快速地计算 A(W,Wm)

3.4 MPE/MWE/sMBR

如果在 scaled MMI 的目标函数分子上增加权重,则引出了如下最小化贝叶斯风险 (MBR, Minimum Bayesian Risk) 目标函数族,

(50)JMBR(S|θ)=m=1MJMBR(Wm,Om|θ)(51)=m=1MWP(Om|W,θ)P(W)αA(W,Wm)WP(Om|W,θ)P(W)α(52)=m=1MWP(Om|S,θ)P(W)αA(W,Wm)WP(Om|S,θ)P(W)α

其中 A(W,Wm) 和在 BMMI 中的含义相同。需要特别注意上面的目标函数 (52) 是 M 个训练样本对应的概率求和,而不是取了对数之后再求和。

如果公式 (52) 中的 A(W,Wm) 度量的是正确文本 Wm 和备选文本 W 之间音素级别的匹配程度,则该目标函数被称为最小化音素错误 ( MPE,Minimum Phone Error) ;如果 A(W,Wm) 度量的是正确文本 Wm 和备选文本 W 对齐后正确词 (字) 的个数,则该目标函数被称为最小化词错误 (MWE,Minimum Word Error) 。文本之间的对齐可以参考编辑距离或 WER 的计算;如果 A(W,Wm) 度量的是正确文本 Wm 和备选文本 W 在状态级别的匹配程度,即利用训练好的 GMM-HMM 或者 DNN-HMM 对音频信号 OmWm/ W 分别进行帧-状态级别的对齐,然后统计两个帧-状态对齐中结果相同的帧数, 则该目标函数被称为状态级的最小贝叶斯风险 (sMBR,state-Minimum Bayesian Risk)。

不论是 MPE,MWE 或者 sMBR, 都是给予了和正确文本更相似的备选文本较高的权重,优化目标函数之后得到的声学模型 P(Om|W,θ) 将在相似度较高的文本上给予更高的声学得分,而在相似度较低的文本上给予更低的声学得分。

对比 MPE 和 MWE 的目标函数,理论上,当训练数据量趋于无穷, MWE 的目标函数应该逼近模型的泛化 WER, 所以最小化 MWE 的目标函数应该和最小化 WER 的目标更匹配。 但是,实验结果表明,在多数的训练集上进行序列区分性训练之后,MPE 在测试集上的表现比 MWE 的更好一些 [Povey, 2003]。

类似于 BMMI,下面给出了 emtL(i) 的计算公式,

(53)emtL(i)=rJMBR(Wm,Om|θ)logP(Otm|Stm=r)logP(Otm|Stm=r)zmtL(i)(54)=rγmtden(r)(Bm(St=r)Bm)logP(Otm|Stm=r)zmtL(i)

其中,

(55)γmtden(r)=W1(St=r)P(Om|S,θ)P(W)αWP(Om|S,θ)P(W)α(56)Bm(St=r)=WP(Om|S,θ)P(W)αA(W,Wm)1(St=r)WP(Om|S,θ)P(W)α1(St=r)(57)Bm=WP(Om|S,θ)P(W)αA(W,Wm)WP(Om|S,θ)P(W)α

证明的细节参考附录 7.3

3.5. 训练准则的比较

介绍了前面的序列判别式训练的准则,到底实践当中应该选择什么样的准则呢? 在文献 [] 中分别使用了不同的训练准则来训练模型,结果显示使用不同的序列区分性训练准则进行训练得到的模型在测试集上结果并没有很大的差异。从 SWB Hub5‘00 和 Hub5'01 两个测试集上的 WER 来看,DNN + sMBR 的结果相对来说更好一些。但是由于 MMI 和 scaled MMI 更容易被理解和实现,所以实际中使用较多,例如 chain 模型就主要使用 MMI 准则进行优化。

 

5. 本章小结

 

6. 参考资料

7. 附录

7.1

7.2

对等式 (59) 求和号中的两项分别进行求解。首先 ,求解第一项

求解等式 (61) 中第一项可得,

求解等式 (61) 中第二项可得,

综合 (62)(66),可知,

其次求解 (59) 求和号中的第二项,

综合 (67)(74) 的结果,最后可得

7.3

分别对等式 (80) 右边求和号中的两项分别进行求解。首先求解第一项,

继续对上面的等式 (83) 括号中的两项进行求解,其中的第一项为,

第二项为,

综合等式 (87)(89), 可得

其中

最终得到如下结果,

其中,γmtden(r)=WP(Om|W,θ)P(W)α1(St=r)WP(Om|W,θ)P(W)α,式 (54) 得证。

序列区分性训练

序列区分性训练

陈代君 - 2021

摘要:前面的章节介绍了基于极小化交叉熵 (CE) 准则的声学模型训练。本章在此基础上介绍基于极大化互信息准则的声学模型序列区分性训练,包括极大互信息准则引入的动机和优化算法。同时介绍了在实现过程中,使用的基于词格和不基于词格的两种策略。进一步,本章还介绍了一些其他序列区分性准则,同时给出了优化算法及其推导过程。最后,介绍了 Kaldi 中序列区分性准则的示例,帮助读者更好的理解序列区分性准则。

1. 生成式模型的缺陷

语音识别的本质可以用下面的公式进行描述,

其中 表示观测到的语音信号序列, 表示词序列。传统的语音识别进一步分解上面的公式 $(\ref{sec1_basic})$,

其中,分母上的 在声音信号给定后是不需要考虑的常量;分子上的 表示语言模型, 表示声学模型。 声学模型的参数 $\theta$ 通常基于训练集 进行估计,例如极大似然估计。

为了能够理解极大似然估计的缺陷,先回顾一下极大似然估计。统计的频率学派将参数 视为未知常量,在模型类型给定的基础上,基于训练数据在参数空间中寻找使得似然函数最大的 ,记为 , 这个值就是 的极大似然估计。求极大似然估计的过程中,需要给定模型类型,例如在语音识别中,通常假定模型为 GMM-HMM 或者 DNN-HMM。因为真实的语音信号并不是由 HMM 生成的,所以在 GMM-HMM 模型假设的基础上根据似然最大准则找到的最优参数并不一定使得 WER 或者 SER 最小。换句话说,似然极大并不能保证语音识别的错误率最小。

实际上, 是描述数据分布的生成式模型 (generative model),即给定词序列,假设观测到的语音信号服从 GMM-HMM 或者 DNN-HMM 模型描述的分布。不同于生成式模型,区分性模型 (discriminative model,也称为判别式模型) 直接对给定观测数据条件下真实类别的分布进行建模,即对 进行建模。

2. MMI 估计

2.1 MMI 估计的基本原理

因为语音信号随机变量 和词序列随机变量 的互信息如下,

其中, 表示词序列随机变量的熵, 表示条件为语音信号随机变量的条件熵。

因为 与待估计模型的参数无关,所以极大化互信息 等价于极小化条件熵 。极小化条件熵意味着语音信号随机变量 给定条件下,极小化词序列随机变量 的不确定性。 又因为下面的互信息表达式 $(\ref{sec2_mi})$ 中, 不含声学模型待估参数,故极大化互信息等价于极大化 $(\ref{sec2_mi})$ 右边的第一项。

基于训练集 ,可以训练极大似然声学模型 (GMM-HMM, 或 DNN-HMM) 。利用极大似然声学模型对训练集进行状态级别的对齐后,可以得到对齐后的训练集 $\mathbb{S}^{aligned}=\{(W^m,O^m,S^m)\}_{m=1}^{M}$,其中 $W^{m}=W^m_1,\cdots,W^m_{N_m}, O^m=O^m_1,\cdots,O^m_{T_m}, S^m=S^m_1,\cdots,S^m_{T_m}$。极大互信息 (MMI, maximum mutual information) 准则公式如下,

其中,分母上的 表示给定语音信号 条件下可能的词序列。例如,当正确的词序列为 “动手学语音识别”, “冻手雪余音识别” 可以作为一个可能的词序列。

为了极大化 MMI 的目标函数,可以增加分子或者减小分母 (MMI 的目标函数可以转化为似然函数乘积的形式)。 增加分子意味着提高给定正确词序列条件下观测语音信号的概率,即声学模型的概率。减小分母等同于减少错误词序列条件下观测语音的概率。综合起来看,增加正确词序列的概率和减少错误词序列的概率使得最终的 MMI 估计具有更好的区分性,最终经过区分性训练后的声学模型能够更好地识别出正确的词序列。

2.2 MMI 训练算法推导

2.2.1 GMM-HMM

理解了 MMI 的基本原理之后,还需要能够快速寻找 MMI 目标函数的优化算法。 相对于极大似然目标函数的优化来说, MMI 的目标函数的优化是更难的。总的来说,有两类算法被用来优化 MMI 的目标函数。第一类是基于梯度的优化算法,例如 GPD (Generalized Probabilistic Descent)。 第二类是更接近 EM 算法的 EB (Extended Baum-Welch) 算法。相对于基于梯度的优化算法,EB 算法具有下面的优势。

  • EB 算法利用辅助函数从理论上确保了算法的收敛和高效。
  • EB 算法可以处理 HMM 中每个状态到其他状态的转移概率求和等于 1 以及 GMM 各分量权重求和等于 1 这两个等式约束条件。

下面是 GMM-HMM 模型的 EB 算法第 步的迭代公式, 证明的细节参考附录。

其中,

上面的参数更新公式中, 的计算需要遍历所有可能的词序列。因l为所有可能的词序列数量巨大,所以直接通过上面的更新公式来求解参数的 MMI 估计几乎是不可能的。 为了克服这个计算上的困难,下面两个小节将介绍两种解决方法。

2.2.2 DNN-HMM

不同于传统的 GMM-HMM,DNN-HMM 的区分性训练主要采用了基于随机梯度下降的优化算法。假设 $y_{mt}^L=softmax(z^L_{mt})$ 是 DNN 的输出,则 MMI 的目标函数关于模型参数 $\theta$ 的梯度可以通过如下公式计算,

上面计算梯度的公式 $(\ref{sec2_dnn-hmm_grad})$ 中,$\frac{\part{z_{mt}^{L}}}{\part{\theta}}$ 只跟DNN的网络结构相关,和目标函数无关,所以仅关心目标函数关于 $z_{mt}^{L}$ 的梯度计算。为了方便,记 $e^{L}_{mt}=(e^{L}_{mt}(1),\dots, e^{L}_{mt}(n_L))^T$,其中 $e_{mt}^{L}(i)=\grad_{z_{mt}^{L}(i)}J_{MMI}(W^{m},O^{m}|\theta)$ 且 $n_L$ 表示 DNN 输出层 (第 L 层) 的节点个数。

其中,$\mathbb{1}(\cdot)$ 表示示性函数,如果自变量内条件成立,取值为 1,否则为 0;

证明见附录 7.2

2.3 Lattice-based MMI

为了加速 MMI 的计算量,早期的工作主要集中在使用 N-best 列表来近似 MMI 分母中所有可能词序列的集合。但是对于非常长的词序列,LM 计算出来的概率都接近于零,导致 N-best 中存储的备选词序列不能很好地近似分母所需的词序列集合 [Chow, 1990] 。另一种逼近 MMI 分母词序列的方案中,对每一个训练词序列生成一个 Lattice(词格),该 Lattice 将会被应用到 MMI 训练且在迭代过程不会被更新 [Povey, 2003]。

Lattice-based MMI 的具体实现步骤如下,


实现步骤

  1. 分子部分 Lattice 的构造:基于极大似然准则训练好 GMM-HMM(或基于 CE 准则训练好 DNN-HMM 模型),将训练好的模型应用到正确标准的词序列和音频信号序列上进行状态级别的对齐并生成正确词序列对应的 Lattice。
  2. 分母部分 Lattice 的构造: 利用 unigram 语言模型构建出 HCLG, 识别所有的训练例子 并保留识别过程中的 Lattice, 。 尽管在 [Povey, 2003] 文章中,主要利用 bigram 语言模型构建 HCLG,但是论文也提到利用 unigram 语言模型构建 HCLG 会得到更好的实验结果。
  3. Lattice-based MMI 的迭代训练: 对于一个训练样本
    • 基于 1. 中构造的分子 Lattice, 利用 unigram 语言模型得到正确路径的概率并计算 的前向和后向概率。
    • 基于 2. 中构造的分母 Lattice, 构造正确路径对应的竞争路径集合,并利用 unigram 语言模型计算该竞争路径的概率,类似分子部分计算每条竞争路径的概率后求和得到
    • 迭代更新模型参数至收敛,得到参数的 MMI 估计。

上面的实现步骤中,利用两个不同的模型分别对分子和分母部分构建分子 Lattice 以及分母 Lattice。其中分母 Lattice 的构造, 利用了由简单的 unigram 语言模型组成的 HCLG 有限状态转移图。在 MMI 的迭代更新过程中,分母和分子部分的计算都利用了 unigram 语言模型计算路径的概率。

下面的表格总结了 [Povey, 2003] 中报告的 Lattice-based MMI 训练过程中的各方面影响,

结论 解释
区分性训练中的语言模型 unigram 优于 bigram 和 zerogram (无语言模型) 。 尽管在某些测试集上,zerogram 模型或者按比例缩小的 unigram 模型优于 unigram, 但是会增加常用词的错误。
重新生成 Lattice 在训练 MMI 的过程中不需要更新 Lattice。 尽管在 MMI 的训练过程中,基于最新模型重新生成 Lattice 或对齐有最多 0.3% 的绝对 WER 提升,但是由于较高的计算复杂度,所以并不推荐在训练过程中更新 Lattice或对齐。
Lattice 的大小 存在一个合适的阈值,使得在不大幅减小最终 MMI 估计识别精度的前提下,可以减小 Lattice 的复杂度。 若备选路径 满足 ,则对该路径进行剪枝。实验结果表明,阈值取100 时,词错误率减小量不超过 0.2%。

3. 区分性准则

3.1 区分性准则的统一形式

除 MMI 目标函数 $(\ref{mmi_obj})$ 之外,区分性训练还可以使用许多其他的目标函数。实际上,这些区分性训练所使用的目标函数都基本符合如下的统一形式 $(\ref{seq_uniform_den_num})$。

统一形式 $(\ref{seq_uniform_den_num})$ 关于给定样本 $(W^m,O^m)$ 由分子和分母两部分组成。其分子上的 $J^{num}_{seq_uniform}(\cdot)$ 通常由表示正确词序列 $W^m$ 的词格计算;分母上的 $J_{seq_uniform}^{den}(\cdot)$ 通常由表示备选词序列 $W$ 的词格计算。目标函数 $J_{seq_uniform}(\mathbb{S}|\theta)$ 关于 $\theta$ 的梯度如下,

其中 $\frac{\part z_{mt}^L}{\part \theta}$ 和目标函数无关,只和使用的 DNN 网络结构相关。因此只需要考虑

不同目标函数梯度的区别主要出现在 $\gamma_{mt}^{num}(i)$ 以及 $\gamma_{mt}^{den}(i)$ 的计算上。接下来将统一的公式应用到不同的目标函数,同时给出对应的梯度。

3.2 scaled MMI

在 MMI 的目标函数中,分子和分母部分的词序列概率通常采用简单的 unigram 语言模型来近似,因为 unigram 模型忽略了词与词之间的相关性,所以导致备选词序列集合中概率高的词序列数量较少。最终导致 MMI 的目标函数不需要怎么调整声学模型参数就可以达到较大值, 但是却没有提高声学模型对于混淆路径的区分能力。为了解决混淆路径较少的问题,引入如下的 scaled MMI 目标函数,

其中 被称为尺度因子 (scale factor),

加入尺度因子之后,能够缩小备选词序列集合中词序列语言模型概率之间的差异,从而增加混淆路径的数量。使得最大化 scaled MMI 目标函数能够得到更具区分性的声学模型



图 3-1 尺度因子对词序列概率的作用

为了直观说明尺度因子 的作用,图 3-1 给出了四个不同的尺度因子条件下词序列概率 的变化。 假设 ,两条红色的水平虚线和纵轴的交点间距表示 时两个词序列概率的差;而两条蓝色的水平虚线和纵轴的交点间距表示 时两个词序列概率的差。从图 3-1 中可以看到,蓝色的交点间距明显小于红色的交点间距,所以应用更小的尺度因子可以减小词序列概率间的差异,从而增加混淆路径的数量。

在文献 [] 中,scaled MMI 的尺度因子 $\alpha$ 在目标函数分子和分母上的声学模型上。将尺度因子 $\alpha$ 放到声学模型或者语言模型的目标是相似的,都是为了增加混淆路径的数量。不同之处在于,如果将尺度因子 $\alpha$ 放到语言模型上,减小 $\alpha$ 会增加混淆路径的数量;如果将尺度因子 $\alpha$ 放到声学模型上,减小 $\alpha$ 会减少混淆路径的数量。由于将 $\alpha$ 放到声学模型或语言模型上没有本质区别,同时将 $\alpha$ 放到语言模型上会得到形式上与 MMI 相同的梯度表达式 $(\ref{sec_scaled-mmi_grad})$,所以本书将 scaled MMI 的尺度因子 $\alpha$ 放到语言模型上。

因为 scaled MMI 和 MMI 的目标函数仅在分子和分母上的语言模型有所不同,所以可以类似地求出 scaled MMI 目标函数关于参数 $\theta$ 的梯度。这里仅给出 $e_{mt}^{L}(i)=\grad_{z_{mt}^{L}(i)}J_{scaled_MMI}(W^{m},O^{m}|\theta)$ 的计算公式,

其中,

3.3 BMMI

基于 scaled MMI 目标函数,如果能够提升声学模型对于包含较多错误的路径与正确路径之间的区分度,就可以减少最终识别结果中的错误率。基于这种想法,对 scaled MMI 目标函数 $(\ref{sec_scaled_mmi_obj})$ 分母上包含错误较多的路径给予更高的权重,提出了增强的 MMI (BMMI, Boosted MMI),其目标函数如下,

其中 是尺度因子,b 是非负的增强因子 (boosting factor), 是正确文本 和备选文本 $W$ 之间的匹配程度度量,可以从词,音素和状态三个层面计算。例如考虑音素层面的匹配程度,常用已训练好的 GMM-HMM 或者 DNN-HMM 把音频信号 / 分别进行帧-音素级别的对齐,然后统计两个帧-音素对齐中结果相同的帧数。 匹配程度越高, 该备选词序列 $W$ 的重要度越低;反之 匹配程度越低,该备选词序列 $W$ 的重要度越高。最大化 BMMI 目标函数 $(\ref{sec_bmmi_obj})$,匹配程度较低的备选词序列相对于匹配程度较高的备选词序列来说,声学模型 的取值会变小。这就使得经过序列区分训练后的声学模型更倾向于选择贴近正确词序列的备选答案。

对比 scaled MMI 的目标函数,BMMI 仅在分母上的求和号中增加了增强系数 (boosting term) $\exp\{-b\cdot A(W, W^m)\}$,所以这里仅给出 $e_{mt}^{L}(i)=\grad_{z_{mt}^{L}(i)}J_{BMMI}(W^{m},O^{m}|\theta)$ 的计算公式,

其中,

为了能够快速地计算 BMMI 目标函数的梯度,需要能够快速地计算 $A(W, W^m)$。

3.4 MPE/MWE/sMBR

如果在 scaled MMI 的目标函数分子上增加权重,则引出了如下最小化贝叶斯风险 (MBR, Minimum Bayesian Risk) 目标函数族,

其中 $A(W, W^m)$ 和在 BMMI 中的含义相同。需要特别注意上面的目标函数 $(\ref{sec_mbr_obj})$ 是 M 个训练样本对应的概率求和,而不是取了对数之后再求和。

如果公式 $(\ref{sec_mbr_obj})$ 中的 度量的是正确文本 和备选文本 之间音素级别的匹配程度,则该目标函数被称为最小化音素错误 ( MPE,Minimum Phone Error) ;如果 度量的是正确文本 和备选文本 对齐后正确词 (字) 的个数,则该目标函数被称为最小化词错误 (MWE,Minimum Word Error) 。文本之间的对齐可以参考编辑距离或 WER 的计算;如果 度量的是正确文本 和备选文本 在状态级别的匹配程度,即利用训练好的 GMM-HMM 或者 DNN-HMM 对音频信号 / 分别进行帧-状态级别的对齐,然后统计两个帧-状态对齐中结果相同的帧数, 则该目标函数被称为状态级的最小贝叶斯风险 (sMBR,state-Minimum Bayesian Risk)。

不论是 MPE,MWE 或者 sMBR, 都是给予了和正确文本更相似的备选文本较高的权重,优化目标函数之后得到的声学模型 将在相似度较高的文本上给予更高的声学得分,而在相似度较低的文本上给予更低的声学得分。

对比 MPE 和 MWE 的目标函数,理论上,当训练数据量趋于无穷, MWE 的目标函数应该逼近模型的泛化 WER, 所以最小化 MWE 的目标函数应该和最小化 WER 的目标更匹配。 但是,实验结果表明,在多数的训练集上进行序列区分性训练之后,MPE 在测试集上的表现比 MWE 的更好一些 [Povey, 2003]。

类似于 BMMI,下面给出了 $e_{mt}^L(i)$ 的计算公式,

其中,

证明的细节参考附录 7.3

3.5. 训练准则的比较

介绍了前面的序列判别式训练的准则,到底实践当中应该选择什么样的准则呢? 在文献 [] 中分别使用了不同的训练准则来训练模型,结果显示使用不同的序列区分性训练准则进行训练得到的模型在测试集上结果并没有很大的差异。从 SWB Hub5‘00 和 Hub5’01 两个测试集上的 WER 来看,DNN + sMBR 的结果相对来说更好一些。但是由于 MMI 和 scaled MMI 更容易被理解和实现,所以实际中使用较多,例如 chain 模型就主要使用 MMI 准则进行优化。

5. 本章小结

6. 参考资料

1

7. 附录

7.1

7.2

对等式 $(\ref{append2_emtl})$ 求和号中的两项分别进行求解。首先 ,求解第一项

求解等式 $(\ref{append2_mmi_sub})$ 中第一项可得,

求解等式 $(\ref{append2_mmi_sub})$ 中第二项可得,

综合 $(\ref{append2_mmi_sub1})$ 和 $(\ref{append2_mmi_sub2})$,可知,

其次求解 $(\ref{append2_emtl})$ 求和号中的第二项,

综合 $(\ref{append2_mmi_part1})$ 和 $(\ref{append2_mmi_part2})$ 的结果,最后可得

</a>

7.3

分别对等式 $(\ref{mbr_grad})$ 右边求和号中的两项分别进行求解。首先求解第一项,

继续对上面的等式 $(\ref{mbr_grad_part1_1})$ 括号中的两项进行求解,其中的第一项为,

第二项为,

综合等式 $(\ref{mbr_grad_part1_1_1})$ 和 $(\ref{mbr_grad_part1_1_2})$, 可得

其中

最终得到如下结果,

其中,$\gamma_{mt}^{den}(r)=\frac{\sum_{W}\mathbb{P}(O^m|W,\theta)\mathbb{P}(W)^{\alpha}\mathbb{1}(S_t=r)}{\sum_{W}\mathbb{P}(O^m|W,\theta)\mathbb{P}(W)^{\alpha}}$,式 $(\ref{mbr_grad_result})$ 得证。

</a>

序列区分性训练 # 标题

序列区分性训练

陈代君 - 2021

摘要:前面的章节介绍了基于极小化交叉熵 (CE) 准则的声学模型训练。本章在此基础上介绍基于极大化互信息准则的声学模型序列区分性训练,包括极大互信息准则引入的动机和优化算法。同时介绍了在实现过程中,使用的基于词格和不基于词格的两种策略。进一步,本章还介绍了一些其他序列区分性准则,同时给出了优化算法及其推导过程。最后,介绍了 Kaldi 中序列区分性准则的示例,帮助读者更好的理解序列区分性准则。

 

1. 生成式模型的缺陷

语音识别的本质可以用下面的公式进行描述,

(1)maxWP(W|O)

其中 O=O1,,OT 表示观测到的语音信号序列,W=W1,,WN 表示词序列。传统的语音识别进一步分解上面的公式 (1)

(2)maxWP(W|O)=maxWP(O|W,θ)P(W)P(O)

其中,分母上的 P(O) 在声音信号给定后是不需要考虑的常量;分子上的 P(W) 表示语言模型, P(O|W,θ) 表示声学模型。 声学模型的参数 θ 通常基于训练集 {(Wm,Om)}m=1M 进行估计,例如极大似然估计。

为了能够理解极大似然估计的缺陷,先回顾一下极大似然估计。统计的频率学派将参数 θ 视为未知常量,在模型类型给定的基础上,基于训练数据在参数空间中寻找使得似然函数最大的 θ,记为 θ^MLE, 这个值就是 θ 的极大似然估计。求极大似然估计的过程中,需要给定模型类型,例如在语音识别中,通常假定模型为 GMM-HMM 或者 DNN-HMM。因为真实的语音信号并不是由 HMM 生成的,所以在 GMM-HMM 模型假设的基础上根据似然最大准则找到的最优参数并不一定使得 WER 或者 SER 最小。换句话说,似然极大并不能保证语音识别的错误率最小。

实际上,P(O|W,θ) 是描述数据分布的生成式模型 (generative model),即给定词序列,假设观测到的语音信号服从 GMM-HMM 或者 DNN-HMM 模型描述的分布。不同于生成式模型,区分性模型 (discriminative model,也称为判别式模型) 直接对给定观测数据条件下真实类别的分布进行建模,即对 P(W|O,θ) 进行建模。

 

2. MMI 估计

2.1 MMI 估计的基本原理

因为语音信号随机变量 O 和词序列随机变量 W 的互信息如下,

(3)I(O,W)=ElogP(O,W)P(O)P(W)(4)=H(W)H(W|O)

其中, H(W) 表示词序列随机变量的熵,H(W|O) 表示条件为语音信号随机变量的条件熵。

因为 H(W) 与待估计模型的参数无关,所以极大化互信息 I(O,W) 等价于极小化条件熵 H(W|O)。极小化条件熵意味着语音信号随机变量 O 给定条件下,极小化词序列随机变量 W 的不确定性。 又因为下面的互信息表达式 (5) 中,P(W) 不含声学模型待估参数,故极大化互信息等价于极大化 (5) 右边的第一项。

(5)I(O,W)=ElogP(O,W)P(O)ElogP(W)

基于训练集 S={(Wm,Om)}m=1M ,可以训练极大似然声学模型 (GMM-HMM, 或 DNN-HMM) 。利用极大似然声学模型对训练集进行状态级别的对齐后,可以得到对齐后的训练集 Saligned={(Wm,Om,Sm)}m=1M,其中 Wm=W1m,,WNmm,Om=O1m,,OTmm,Sm=S1m,,STmm。极大互信息 (MMI, maximum mutual information) 准则公式如下,

(6)JMMI(S|θ)=m=1MJMMI(Wm,Om|θ)(7)=m=1MlogP(Wm|Om,θ)(8)=m=1MlogP(Om|Wm,θ)P(Wm)WP(Om|W,θ)P(W)(9)=m=1MlogP(Om|Sm,θ)P(Wm)WP(Om|S,θ)P(W)

其中,分母上的 W 表示给定语音信号 Om 条件下可能的词序列。例如,当正确的词序列为 "动手学语音识别", “冻手雪余音识别” 可以作为一个可能的词序列。

为了极大化 MMI 的目标函数,可以增加分子或者减小分母 (MMI 的目标函数可以转化为似然函数乘积的形式)。 增加分子意味着提高给定正确词序列条件下观测语音信号的概率,即声学模型的概率。减小分母等同于减少错误词序列条件下观测语音的概率。综合起来看,增加正确词序列的概率和减少错误词序列的概率使得最终的 MMI 估计具有更好的区分性,最终经过区分性训练后的声学模型能够更好地识别出正确的词序列。

2.2 MMI 训练算法推导

2.2.1 GMM-HMM

理解了 MMI 的基本原理之后,还需要能够快速寻找 MMI 目标函数的优化算法。 相对于极大似然目标函数的优化来说, MMI 的目标函数的优化是更难的。总的来说,有两类算法被用来优化 MMI 的目标函数。第一类是基于梯度的优化算法,例如 GPD (Generalized Probabilistic Descent)。 第二类是更接近 EM 算法的 EB (Extended Baum-Welch) 算法。相对于基于梯度的优化算法,EB 算法具有下面的优势。

  • EB 算法利用辅助函数从理论上确保了算法的收敛和高效。
  • EB 算法可以处理 HMM 中每个状态到其他状态的转移概率求和等于 1 以及 GMM 各分量权重求和等于 1 这两个等式约束条件。

下面是 GMM-HMM 模型的 EB 算法第 k+1 步的迭代公式, 证明的细节参考附录。

(10)μjm(k+1)=θjmnum(O)θjmden(O)+Djmμjm(k)γjmnumγjmden+Djm(11)(σ2)jm(k+1)=θjmnum(O2)θjmden(O2)+Djm((σ2)jm(k)+(μjm(k))2)γjmnumγjmden+Djm(μjm(k+1))2

其中,

(12)fnum(θ)=i=1NlogPθ(Oi|Si)P(Si)=i=1Nlogaifainum(θ)(13)fden(θ)=i=1NlogjPθ(Oi|Sij)Pθ(Sij)=i=1Nlogjaijfaijden(θ)
(14)γijmnum(t)=ai(t)=jfainum(θ(k))yfynum(θ(k)),γijmden(t)=lail(t)=jfailden(θ(k))yfyden(θ(k))(15)γjmnum=i=1Nt=1Tiγijmnum(t),γjmden=i=1Nt=1Tiγijmden(t)(16)θjmnum(O)=i=1Nt=1Tiγijmnum(t)Oi(t),θjmden(O)=i=1Nt=1Tiγijmden(t)Oi(t)(17)θjmnum(O2)=i=1Nt=1Tiγijmnum(t)Oi2(t),θjmden(O2)=i=1Nt=1Tiγijmden(t)Oi2(t)

上面的参数更新公式中,γijmden(t) 的计算需要遍历所有可能的词序列。因l为所有可能的词序列数量巨大,所以直接通过上面的更新公式来求解参数的 MMI 估计几乎是不可能的。 为了克服这个计算上的困难,下面两个小节将介绍两种解决方法。

2.2.2 DNN-HMM

不同于传统的 GMM-HMM,DNN-HMM 的区分性训练主要采用了基于随机梯度下降的优化算法。假设 ymtL=softmax(zmtL) 是 DNN 的输出,则 MMI 的目标函数关于模型参数 θ 的梯度可以通过如下公式计算,

(18)θJMMI(S|θ)=m=1Mt=1TmzmtLJMMI(Wm,Om|θ)zmtLθ

上面计算梯度的公式 (18) 中,zmtLθ 只跟DNN的网络结构相关,和目标函数无关,所以仅关心目标函数关于 zmtL 的梯度计算。为了方便,记 emtL=(emtL(1),,emtL(nL))T,其中 emtL(i)=zmtL(i)JMMI(Wm,Om|θ)nL 表示 DNN 输出层 (第 L 层) 的节点个数。

(19)emtL(i)=rJMMI(Wm,Om|θ)logP(Otm|Stm=r)logP(Otm|Stm=r)zmtL(i)(20)=r(1(Stm=r)W{W|St=r}P(Om|S,θ)P(W)WlogP(Om|S,θ)P(W))logP(Stm=r|Otm)zmtL(i)(21)=r(1(Stm=r)γmtden(r))logymtL(r)zmtL(i)(22)=1(Stm=i)γmtden(i)

其中,1() 表示示性函数,如果自变量内条件成立,取值为 1,否则为 0;

(23)γmtden(r)=W{W|St=r}P(Om|S,θ)P(W)WP(Om|S,θ)P(W)

证明见附录 7.2

 

2.3 Lattice-based MMI

为了加速 MMI 的计算量,早期的工作主要集中在使用 N-best 列表来近似 MMI 分母中所有可能词序列的集合。但是对于非常长的词序列,LM 计算出来的概率都接近于零,导致 N-best 中存储的备选词序列不能很好地近似分母所需的词序列集合 [Chow, 1990] 。另一种逼近 MMI 分母词序列的方案中,对每一个训练词序列生成一个 Lattice(词格),该 Lattice 将会被应用到 MMI 训练且在迭代过程不会被更新 [Povey, 2003]。

Lattice-based MMI 的具体实现步骤如下,


实现步骤

  1. 分子部分 Lattice 的构造:基于极大似然准则训练好 GMM-HMM(或基于 CE 准则训练好 DNN-HMM 模型),将训练好的模型应用到正确标准的词序列和音频信号序列上进行状态级别的对齐并生成正确词序列对应的 Lattice。

  2. 分母部分 Lattice 的构造: 利用 unigram 语言模型构建出 HCLG, 识别所有的训练例子 (Oi,Wi) 并保留识别过程中的 Lattice, i=1,,N。 尽管在 [Povey, 2003] 文章中,主要利用 bigram 语言模型构建 HCLG,但是论文也提到利用 unigram 语言模型构建 HCLG 会得到更好的实验结果。

  3. Lattice-based MMI 的迭代训练: 对于一个训练样本 (Oi,Wi)

    • 基于 1. 中构造的分子 Lattice, 利用 unigram 语言模型得到正确路径的概率并计算 γijmnum 的前向和后向概率。
    • 基于 2. 中构造的分母 Lattice, 构造正确路径对应的竞争路径集合,并利用 unigram 语言模型计算该竞争路径的概率,类似分子部分计算每条竞争路径的概率后求和得到 γijmden
    • 迭代更新模型参数至收敛,得到参数的 MMI 估计。

上面的实现步骤中,利用两个不同的模型分别对分子和分母部分构建分子 Lattice 以及分母 Lattice。其中分母 Lattice 的构造, 利用了由简单的 unigram 语言模型组成的 HCLG 有限状态转移图。在 MMI 的迭代更新过程中,分母和分子部分的计算都利用了 unigram 语言模型计算路径的概率。

下面的表格总结了 [Povey, 2003] 中报告的 Lattice-based MMI 训练过程中的各方面影响,

 结论解释
区分性训练中的语言模型unigram 优于 bigram 和 zerogram (无语言模型) 。尽管在某些测试集上,zerogram 模型或者按比例缩小的 unigram 模型优于 unigram, 但是会增加常用词的错误。
重新生成 Lattice在训练 MMI 的过程中不需要更新 Lattice。尽管在 MMI 的训练过程中,基于最新模型重新生成 Lattice 或对齐有最多 0.3% 的绝对 WER 提升,但是由于较高的计算复杂度,所以并不推荐在训练过程中更新 Lattice或对齐。
Lattice 的大小存在一个合适的阈值,使得在不大幅减小最终 MMI 估计识别精度的前提下,可以减小 Lattice 的复杂度。若备选路径 p 满足 logP(p)/maxp{logP(p)}<,则对该路径进行剪枝。实验结果表明,阈值取100 时,词错误率减小量不超过 0.2%。

2.4 Lattice-free MMI

 

3. 区分性准则

3.1 区分性准则的统一形式

除 MMI 目标函数 (6) 之外,区分性训练还可以使用许多其他的目标函数。实际上,这些区分性训练所使用的目标函数都基本符合如下的统一形式 (25)

(24)Jseq_uniform(S|θ)=m=1MJseq_uniform(Wm,Om|θ)(25)=m=1MJseq_uniformnum(Wm,Om|θ)Jseq_uniformden(Wm,Om|θ)

统一形式 (25) 关于给定样本 (Wm,Om) 由分子和分母两部分组成。其分子上的 Jseq_uniformnum() 通常由表示正确词序列 Wm 的词格计算;分母上的 Jseq_uniformden() 通常由表示备选词序列 W 的词格计算。目标函数 Jseq_uniform(S|θ) 关于 θ 的梯度如下,

(26)θJseq_uniform(S|θ)=m=1Mt=1TmzmtLJseq_uniform(Wm,Om|θ)zmtLθ

其中 zmtLθ 和目标函数无关,只和使用的 DNN 网络结构相关。因此只需要考虑

(27)emtL(i)=zmtL(i)Jseq_uniform(Wm,Om|θ)(28)=rJseq_uniform(Wm,Om|θ)logP(Otm|Stm=r)logP(Otm|Stm=r)zmtL(i)(29)=r(γmtnum(r)γmtden(r))×((logP(Stm=r|Otm)logP(Stm=r)+logP(Otm))zmtL(i))(30)=r(γmtnum(r)γmtden(r))×logP(Stm=r|Otm)zmtL(i)(31)=r(γmtnum(r)γmtden(r))1P(Stm=r|Otm)P(Stm=r|Otm)zmtL(i)(32)=r(γmtnum(r)γmtden(r))(δirP(Stm=i|Otm))(33)=γmtnum(i)γmtden(i)

不同目标函数梯度的区别主要出现在 γmtnum(i) 以及 γmtden(i) 的计算上。接下来将统一的公式应用到不同的目标函数,同时给出对应的梯度。

3.2 scaled MMI

在 MMI 的目标函数中,分子和分母部分的词序列概率通常采用简单的 unigram 语言模型来近似,因为 unigram 模型忽略了词与词之间的相关性,所以导致备选词序列集合中概率高的词序列数量较少。最终导致 MMI 的目标函数不需要怎么调整声学模型参数就可以达到较大值, 但是却没有提高声学模型对于混淆路径的区分能力。为了解决混淆路径较少的问题,引入如下的 scaled MMI 目标函数,

(34)Jscaled_MMI(S|θ)=m=1MJscaled_MMI(Wm,Om|θ)(35)=m=1MlogP(Om|Wm,θ)P(Wm)αWP(Om|W,θ)P(W)α(36)=m=1MlogP(Om|Sm,θ)P(Wm)αWP(Om|S,θ)P(W)α

其中 α 被称为尺度因子 (scale factor),0<α<1

加入尺度因子之后,能够缩小备选词序列集合中词序列语言模型概率之间的差异,从而增加混淆路径的数量。使得最大化 scaled MMI 目标函数能够得到更具区分性的声学模型 P(Om|Wm,θ)

图 3-1 尺度因子对词序列概率的作用

为了直观说明尺度因子 α 的作用,图 3-1 给出了四个不同的尺度因子条件下词序列概率 P(W)α 的变化。 假设 P(W1)=0.9,P(W2)=0.8,两条红色的水平虚线和纵轴的交点间距表示 α=1 时两个词序列概率的差;而两条蓝色的水平虚线和纵轴的交点间距表示 α=0.25 时两个词序列概率的差。从图 3-1 中可以看到,蓝色的交点间距明显小于红色的交点间距,所以应用更小的尺度因子可以减小词序列概率间的差异,从而增加混淆路径的数量。

在文献 [] 中,scaled MMI 的尺度因子 α 在目标函数分子和分母上的声学模型上。将尺度因子 α 放到声学模型或者语言模型的目标是相似的,都是为了增加混淆路径的数量。不同之处在于,如果将尺度因子 α 放到语言模型上,减小 α 会增加混淆路径的数量;如果将尺度因子 α 放到声学模型上,减小 α 会减少混淆路径的数量。由于将 α 放到声学模型或语言模型上没有本质区别,同时将 α 放到语言模型上会得到形式上与 MMI 相同的梯度表达式 (40),所以本书将 scaled MMI 的尺度因子 α 放到语言模型上。

因为 scaled MMI 和 MMI 的目标函数仅在分子和分母上的语言模型有所不同,所以可以类似地求出 scaled MMI 目标函数关于参数 θ 的梯度。这里仅给出 emtL(i)=zmtL(i)Jscaled_MMI(Wm,Om|θ) 的计算公式,

(37)emtL(i)=rJscaled_MMI(Wm,Om|θ)logP(Otm|Stm=r)logP(Otm|Stm=r)zmtL(i)(38)=r(1(Stm=r)W{W|St=r}P(Om|S,θ)P(W)αWlogP(Om|S,θ)P(W)α)logP(Stm=r|Otm)zmtL(i)(39)=r(1(Stm=r)γmtden(r))logymtL(r)zmtL(i)(40)=1(Stm=i)γmtden(i)

其中,

(41)γmtden(r)=W{W|St=r}P(Om|S,θ)P(W)αWP(Om|S,θ)P(W)α

3.3 BMMI

基于 scaled MMI 目标函数,如果能够提升声学模型对于包含较多错误的路径与正确路径之间的区分度,就可以减少最终识别结果中的错误率。基于这种想法,对 scaled MMI 目标函数 (36) 分母上包含错误较多的路径给予更高的权重,提出了增强的 MMI (BMMI, Boosted MMI),其目标函数如下,

(42)JBMMI(S|θ)=m=1MJBMMI(Wm,Om|θ)(43)=m=1MlogP(Om|Wm,θ)P(Wm)αWP(Om|W,θ)P(W)αexp{bA(W,Wm)}(44)=m=1MlogP(Om|Sm,θ)P(Wm)αWP(Om|S,θ)P(W)αexp{bA(W,Wm)}

其中 α 是尺度因子,b 是非负的增强因子 (boosting factor),A(Wm,W) 是正确文本 Wm 和备选文本 W 之间的匹配程度度量,可以从词,音素和状态三个层面计算。例如考虑音素层面的匹配程度,常用已训练好的 GMM-HMM 或者 DNN-HMM 把音频信号 OmWm/ W 分别进行帧-音素级别的对齐,然后统计两个帧-音素对齐中结果相同的帧数。WmW 匹配程度越高, 该备选词序列 W 的重要度越低;反之 WmW 匹配程度越低,该备选词序列 W 的重要度越高。最大化 BMMI 目标函数 (44),匹配程度较低的备选词序列相对于匹配程度较高的备选词序列来说,声学模型 Pθ(Oi|Wij) 的取值会变小。这就使得经过序列区分训练后的声学模型更倾向于选择贴近正确词序列的备选答案。

对比 scaled MMI 的目标函数,BMMI 仅在分母上的求和号中增加了增强系数 (boosting term) exp{bA(W,Wm)},所以这里仅给出 emtL(i)=zmtL(i)JBMMI(Wm,Om|θ) 的计算公式,

(45)emtL(i)=rJBMMI(Wm,Om|θ)logP(Otm|Stm=r)logP(Otm|Stm=r)zmtL(i)(46)=r(1(Stm=r)W{W|St=r}P(Om|S,θ)P(W)αexp{bA(W,Wm)}WlogP(Om|S,θ)P(W)αexp{bA(W,Wm)})logP(Stm=r|Otm)zmtL(i)(47)=r(1(Stm=r)γmtden(r))logymtL(r)zmtL(i)(48)=1(Stm=i)γmtden(i)

其中,

(49)γmtden(r)=W{W|St=r}P(Om|S,θ)P(W)αexp{bA(W,Wm)}WP(Om|S,θ)P(W)αexp{bA(W,Wm)}

为了能够快速地计算 BMMI 目标函数的梯度,需要能够快速地计算 A(W,Wm)

3.4 MPE/MWE/sMBR

如果在 scaled MMI 的目标函数分子上增加权重,则引出了如下最小化贝叶斯风险 (MBR, Minimum Bayesian Risk) 目标函数族,

(50)JMBR(S|θ)=m=1MJMBR(Wm,Om|θ)(51)=m=1MWP(Om|W,θ)P(W)αA(W,Wm)WP(Om|W,θ)P(W)α(52)=m=1MWP(Om|S,θ)P(W)αA(W,Wm)WP(Om|S,θ)P(W)α

其中 A(W,Wm) 和在 BMMI 中的含义相同。需要特别注意上面的目标函数 (52) 是 M 个训练样本对应的概率求和,而不是取了对数之后再求和。

如果公式 (52) 中的 A(W,Wm) 度量的是正确文本 Wm 和备选文本 W 之间音素级别的匹配程度,则该目标函数被称为最小化音素错误 ( MPE,Minimum Phone Error) ;如果 A(W,Wm) 度量的是正确文本 Wm 和备选文本 W 对齐后正确词 (字) 的个数,则该目标函数被称为最小化词错误 (MWE,Minimum Word Error) 。文本之间的对齐可以参考编辑距离或 WER 的计算;如果 A(W,Wm) 度量的是正确文本 Wm 和备选文本 W 在状态级别的匹配程度,即利用训练好的 GMM-HMM 或者 DNN-HMM 对音频信号 OmWm/ W 分别进行帧-状态级别的对齐,然后统计两个帧-状态对齐中结果相同的帧数, 则该目标函数被称为状态级的最小贝叶斯风险 (sMBR,state-Minimum Bayesian Risk)。

不论是 MPE,MWE 或者 sMBR, 都是给予了和正确文本更相似的备选文本较高的权重,优化目标函数之后得到的声学模型 P(Om|W,θ) 将在相似度较高的文本上给予更高的声学得分,而在相似度较低的文本上给予更低的声学得分。

对比 MPE 和 MWE 的目标函数,理论上,当训练数据量趋于无穷, MWE 的目标函数应该逼近模型的泛化 WER, 所以最小化 MWE 的目标函数应该和最小化 WER 的目标更匹配。 但是,实验结果表明,在多数的训练集上进行序列区分性训练之后,MPE 在测试集上的表现比 MWE 的更好一些 [Povey, 2003]。

类似于 BMMI,下面给出了 emtL(i) 的计算公式,

(53)emtL(i)=rJMBR(Wm,Om|θ)logP(Otm|Stm=r)logP(Otm|Stm=r)zmtL(i)(54)=rγmtden(r)(Bm(St=r)Bm)logP(Otm|Stm=r)zmtL(i)

其中,

(55)γmtden(r)=W1(St=r)P(Om|S,θ)P(W)αWP(Om|S,θ)P(W)α(56)Bm(St=r)=WP(Om|S,θ)P(W)αA(W,Wm)1(St=r)WP(Om|S,θ)P(W)α1(St=r)(57)Bm=WP(Om|S,θ)P(W)αA(W,Wm)WP(Om|S,θ)P(W)α

证明的细节参考附录 7.3

3.5. 训练准则的比较

介绍了前面的序列判别式训练的准则,到底实践当中应该选择什么样的准则呢? 在文献 [] 中分别使用了不同的训练准则来训练模型,结果显示使用不同的序列区分性训练准则进行训练得到的模型在测试集上结果并没有很大的差异。从 SWB Hub5‘00 和 Hub5'01 两个测试集上的 WER 来看,DNN + sMBR 的结果相对来说更好一些。但是由于 MMI 和 scaled MMI 更容易被理解和实现,所以实际中使用较多,例如 chain 模型就主要使用 MMI 准则进行优化。

 

4. Kaldi 实现

 

5. 本章小结

 

6. 参考资料

7. 附录

7.1

7.2

对等式 (59) 求和号中的两项分别进行求解。首先 ,求解第一项

求解等式 (61) 中第一项可得,

求解等式 (61) 中第二项可得,

综合 (62)(66),可知,

其次求解 (59) 求和号中的第二项,

综合 (67)(74) 的结果,最后可得

7.3

分别对等式 (80) 右边求和号中的两项分别进行求解。首先求解第一项,

继续对上面的等式 (83) 括号中的两项进行求解,其中的第一项为,

第二项为,

综合等式 (87)(89), 可得

其中

最终得到如下结果,

其中,γmtden(r)=WP(Om|W,θ)P(W)α1(St=r)WP(Om|W,θ)P(W)α,式 (54) 得证。

 

Text Formatting

Regular, bold, italic, strike, hightlight, inline-code,*emphasis^,,

Cites

[Povey ]

 

Code:

This is a link

Footnote

Wome thing

upper scripts

Example1

Example2

Kaldi 示例

Kaldi 示例

陈代君 - 2021

1. Kaldi 简介

1.1 名字来历

Kaldi 是埃塞俄比亚的牧羊人,发现了咖啡树。因为 Kaldi 最初诞生于 2009 年约翰霍普金斯大学的夏季研讨会,参与研讨会的研究人员当中多数都是咖啡的爱好者,于是 Kaldi 的创作者使用发现咖啡树的人名字命名该语音解码器。后来这个解码器继续开发成了现在的 Kaldi 语音识别工具。

1.2 发展历程

  • 2009 年约翰霍普金斯大学夏季研讨会,仅含有轻量级解码器和 HTK 训练脚本。
  • 2010 年的 Kaldi 研讨会,完善了语音识别工具包功能。
  • 2011 年 正式发布 Kaldi 的代码库,同时在同年的 Kaldi 研讨会,基于GMM 和 SGMM 区分性训练脚本被开发。
  • 2012 年 Kaldi 研讨会, nnet1 的区分性训练和 stacked-bottleneck 网络。
  • 2013 年 Kaldi 研讨会补充完善 Kaldi。
  • 2014 年 JSALT 研讨会,讨论了神经网络内部结构和语音识别的置信度分析。
  • 2015年开始 nnet3 的开发。

1.3 Kaldi 特点

  • 最开始由于开发人员多使用过 HTK, 同时很多开发者都来自于剑桥大学,比如 Daniel Povey, 所以最开始 Kaldi 和 HTK 很类似。
  • 底层源码由 C++ 编写,上层代码由 Python, Perl, shell 组成。
  • 总是包含最新的语音技术。
  • 开源,采用了 Apache License Version 2.0。即可以利用 Kaldi 进行商用。
  • 缺点,文档不全。所以通过给予示例的形式来分享成果。

2. Yes/No 例子

省略安装步骤,可以直接在CRG 上面调用配置好的 docker 环境,进入到编译好的 kaldi 环境中。

alias kaldi='/asr/build/container/lmtools/mkl/shell.sh'

Yes/No 例子是 Kaldi 当中最简单的一个示例,但是却包含了通常 ASR 模型构建的主干内容。所以学习了这个案例之后,对于 ASR 的基本流程会有一个较为清晰的认识。

2.1 运行脚本



图 2-1. YesNo 案例的文件结构

Kaldi 的所有示例的主脚本是最外层文件夹下面的 run.sh, 其余的脚本和文件都在主脚本运行的过程中被调用。

./run.sh

2.2 运行结果

运行该脚本仅需要非常短的时间,大概 2~3 分钟之后便会得到如下所示的结果。

1
2
3
4
local/score.sh: scoring with word insertion penalty=0.0,0.5,1.0
exp/mono0a/decode_test_yesno/wer_9_0.5:%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ]
exp/mono0a/decode_test_yesno/wer_9_1.0:%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ]
%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ] exp/mono0a/decode_test_yesno/wer_10_0.0

上面的内容显示在解码过程中使用了0.0,0.5,1.0 的词嵌入惩罚之后,得到的 WER 为 0,[ 0 / 232, 0 ins, 0 del, 0 sub ] 表示在 232 个测试单词上有 0 个错误,0 个错误中有 0 个是 insertion (插入错误),0 个 deletion (删除错误), 0 个 substitution (替换错误)。最后一行表示最好的测试结果出现在解码参数为 (10, 0) 组合条件下。

2.3 主脚本层面解读

主脚本非常简单,总共包含了 49 行代码。

2.3.1 训练/解码命令定义

在代码的最开始部分,定义了使用何种方式来训练和解码。

1
2
3
4
5
6
#!/usr/bin/env bash

train_cmd="utils/run.pl"
decode_cmd="utils/run.pl"
#train_cmd="utils/slurm.pl"
#decode_cmd="utils/slurm.pl"

上面的 两个变量 train_cmd 和 decode_cmd 分别定义了使用 utils/run.pl 来多任务的执行程序。执行如下命令行,

utils/run.pl JOB=1:3 ./log.JOB echo “run job JOB”

如上的命令执行了三个 echo 命令,并把屏幕上的标准输出写到 ./log.1-3 三个文件当中。其中的 log.1 日志文件如下,记录了实际命令,开始时间,屏幕输出,结束时间。

1
2
3
4
5
6
7
# echo "run job 1"
# Started at Tue Nov 23 20:54:47 EST 2021
#
run job 1
# Accounting: time=0 threads=1
# Ended (code 0) at Tue Nov 23 20:54:47 EST 2021, elapsed time 0 seconds

kaldi 的主脚本 run.sh,在模型训练和解码的过程中,分别使用了上面介绍的两个变量,

1
2
3
4
5
6
7
8
# Mono training
steps/train_mono.sh --nj 1 --cmd "$train_cmd" \
--totgauss 400 \
data/train_yesno data/lang exp/mono0a

# Decoding
steps/decode.sh --nj 1 --cmd "$decode_cmd" \
exp/mono0a/graph_tgpr data/test_yesno exp/mono0a/decode_test_yesno

2.3.2 数据获取

完成了定义训练/解码模型的方式,接下来开始下载和解压数据

1
2
3
4
5
6
7
8
9
if [ ! -d waves_yesno ]; then
wget http://www.openslr.org/resources/1/waves_yesno.tar.gz || exit 1;
# was:
# wget http://sourceforge.net/projects/kaldi/files/waves_yesno.tar.gz || exit 1;
tar -xvzf waves_yesno.tar.gz || exit 1;
fi

train_yesno=train_yesno
test_base_name=test_yesno

上面代码首先从 OpenSLR 网站上下载名为 waves_yesno.tar.gz 的文件, 然后解包到 waves_yesno 路径。该压缩文件中包含了所有建模过程中所使用到的训练及测试数据, 一共是 60 个如下 wav 格式音频数据。



图 2-2. waves_yesno 目录案例

图 2-2 中展示了解压之后文件夹 waves_yesno 下部分音频文件的文件名。这些文件均包含了 8 个以 1/0/_ 进行命名的文件,其中 1 表示 Yes, 0 表示 No, 使用下划线进行连接来表示该语音片段所包含内容的标签。

通常来说,除了需要准备音频文件外,还需提供与音频文件对齐的标注文本 (transcription),通过id来进行对齐。但是yes/no 示例中,直接使用音频对应的标注作为文件名。

2.3.3 数据整理

  1. 训练和测试数据准备

    1
    2
    # Data preparation
    local/prepare_data.sh waves_yesno

    执行上面的命令行后,会得到两个数据集,data/train_yesno 和 data/test_yesno,

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    train_yesno/
    ├── spk2utt
    ├── text
    ├── utt2dur
    ├── utt2spk
    └── wav.scp

    dev_yesno/
    ├── spk2utt
    ├── text
    ├── utt2dur
    ├── utt2spk
    └── wav.scp
  2. 人工准备资源

    在 input 下面需要一些人工准备的资源,

    1
    2
    3
    4
    5
    input/
    ├── lexicon_nosil.txt
    ├── lexicon.txt
    ├── phones.txt
    └── task.arpabo
    • lexicon.txt

      1
      2
      YES Y
      NO N
    • lexicon_nosil.txt

      1
      2
      3
      <SIL> SIL
      YES Y
      NO N
    • phones.txt

      1
      2
      3
      SIL
      Y
      N
    • task.arpabo

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      \data\
      ngram 1=4

      \1-grams:
      -1 NO
      -1 YES
      -99 <s>
      -1 </s>

      \end\
  3. 准备语言文件夹

    1
    2
    3
    4
    local/prepare_dict.sh
    utils/prepare_lang.sh --position-dependent-phones false data/local/dict "<SIL>" data/local/lang data/lang
    local/prepare_lm.sh
    echo "finished "

    前两行准备 data/lang (语言文件夹)。第三行脚本准备 lm,将 arpa 格式的 LM 转换成 WFST 的格式。

2.3.4 提取声学特征

1
2
3
4
5
6
# Feature extraction
for x in train_yesno test_yesno; do
steps/make_mfcc.sh --nj 1 data/$x exp/make_mfcc/$x mfcc
steps/compute_cmvn_stats.sh data/$x exp/make_mfcc/$x mfcc
utils/fix_data_dir.sh data/$x
done

执行了如上脚本之后,可以到 data/train_yesno 以及 data/dev_yesno 两个数据集对应的 feats.scp 文件,其中 data/train_yesno/feats.scp 文件如下,

1
2
0_0_0_0_1_1_1_1 /mnt/users/daijun_chen/gits/github/kaldi/egs/yesno/s5/mfcc/raw_mfcc_train_yesno.1.ark:16
0_0_0_1_0_0_0_1 /mnt/users/daijun_chen/gits/github/kaldi/egs/yesno/s5/mfcc/raw_mfcc_train_yesno.1.ark:8386

2.3.5 声学模型的训练

1
2
3
4
# Mono training
steps/train_mono.sh --nj 1 --cmd "$train_cmd" \
--totgauss 400 \
data/train_yesno data/lang exp/mono0a

2.3.6 构建状态图 HCLG

1
2
# Graph compilation  
utils/mkgraph.sh data/lang_test_tg exp/mono0a exp/mono0a/graph_tgpr

2.3.7 使用解码器进行解码

1
2
3
4
5
6
# Decoding
steps/decode.sh --nj 1 --cmd "$decode_cmd" \
exp/mono0a/graph_tgpr data/test_yesno exp/mono0a/decode_test_yesno

for x in exp/*/decode*; do [ -d $x ] && grep WER $x/wer_*; done
for x in exp/*/decode*; do [ -d $x ] && grep WER $x/wer_* | utils/best_wer.sh; done

输出的声学模型在路径 exp/mono0a 下面,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
mono0a/
├── 0.mdl
├── 40.mdl
├── 40.occs
├── ali.1.gz
├── cmvn_opts
├── decode_test_yesno
│   ├── lat.1.gz
│   ├── log
│   ├── num_jobs
│   ├── scoring_kaldi
│   │   ├── best_wer
│   │   ├── log
│   │   ├── penalty_0.0
│   │   │   ├── *.txt
│   │   │   └── log
│   │   ├── penalty_0.5
│   │   │   ├── *.txt
│   │   │   └── log
│   │   ├── penalty_1.0
│   │   │   ├── *.txt
│   │   │   └── log
│   │   ├── test_filt.txt
│   │   └── wer_details
│   │   ├── lmwt
│   │   ├── ops
│   │   ├── per_spk
│   │   ├── per_utt
│   │   ├── wer_bootci
│   │   └── wip
│   ├── wer_10_*.*
├── final.mdl -> 40.mdl
├── final.occs -> 40.occs
├── fsts.1.gz
├── graph_tgpr
│   ├── disambig_tid.int
│   ├── HCLG.fst
│   ├── num_pdfs
│   ├── phones
│   │   ├── align_lexicon.int
│   │   ├── align_lexicon.txt
│   │   ├── disambig.int
│   │   ├── disambig.txt
│   │   ├── optional_silence.csl
│   │   ├── optional_silence.int
│   │   ├── optional_silence.txt
│   │   └── silence.csl
│   ├── phones.txt
│   └── words.txt
├── log
├── num_jobs
├── phones.txt
└── tree

2.3.8 识别结果样例

1
2
3
4
5
6
7
1_0_0_0_0_0_0_0 YES NO NO NO NO NO NO NO
1_0_0_0_0_0_0_1 YES NO NO NO NO NO NO YES
1_0_0_0_0_0_1_1 YES NO NO NO NO NO YES YES
1_0_0_0_1_0_0_1 YES NO NO NO YES NO NO YES
1_0_0_1_0_1_1_1 YES NO NO YES NO YES YES YES
1_0_1_0_1_0_0_1 YES NO YES NO YES NO NO YES
1_0_1_1_0_1_1_1 YES NO YES YES NO YES YES YES

Kaldi 示例

Kaldi 示例

陈代君 - 2021

1. Kaldi 简介

1.1 名字来历

Kaldi 是埃塞俄比亚的牧羊人,发现了咖啡树。因为 Kaldi 最初诞生于 2009 年约翰霍普金斯大学的夏季研讨会,参与研讨会的研究人员当中多数都是咖啡的爱好者,于是 Kaldi 的创作者使用发现咖啡树的人名字命名该语音解码器。后来这个解码器继续开发成了现在的 Kaldi 语音识别工具。

1.2 发展历程

  • 2009 年约翰霍普金斯大学夏季研讨会,仅含有轻量级解码器和 HTK 训练脚本。
  • 2010 年的 Kaldi 研讨会,完善了语音识别工具包功能。
  • 2011 年 正式发布 Kaldi 的代码库,同时在同年的 Kaldi 研讨会,基于GMM 和 SGMM 区分性训练脚本被开发。
  • 2012 年 Kaldi 研讨会, nnet1 的区分性训练和 stacked-bottleneck 网络。
  • 2013 年 Kaldi 研讨会补充完善 Kaldi。
  • 2014 年 JSALT 研讨会,讨论了神经网络内部结构和语音识别的置信度分析。
  • 2015年开始 nnet3 的开发。

1.3 Kaldi 特点

  • 最开始由于开发人员多使用过 HTK, 同时很多开发者都来自于剑桥大学,比如 Daniel Povey, 所以最开始 Kaldi 和 HTK 很类似。
  • 底层源码由 C++ 编写,上层代码由 Python, Perl, shell 组成。
  • 总是包含最新的语音技术。
  • 开源,采用了 Apache License Version 2.0。即可以利用 Kaldi 进行商用。
  • 缺点,文档不全。所以通过给予示例的形式来分享成果。

2. Yes/No 例子

省略安装步骤,可以直接在CRG 上面调用配置好的 docker 环境,进入到编译好的 kaldi 环境中。

alias kaldi='/asr/build/container/lmtools/mkl/shell.sh'

Yes/No 例子是 Kaldi 当中最简单的一个示例,但是却包含了通常 ASR 模型构建的主干内容。所以学习了这个案例之后,对于 ASR 的基本流程会有一个较为清晰的认识。

2.1 运行脚本



图 2-1. YesNo 案例的文件结构

Kaldi 的所有示例的主脚本是最外层文件夹下面的 run.sh, 其余的脚本和文件都在主脚本运行的过程中被调用。

./run.sh

2.2 运行结果

运行该脚本仅需要非常短的时间,大概 2~3 分钟之后便会得到如下所示的结果。

1
2
3
4
local/score.sh: scoring with word insertion penalty=0.0,0.5,1.0
exp/mono0a/decode_test_yesno/wer_9_0.5:%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ]
exp/mono0a/decode_test_yesno/wer_9_1.0:%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ]
%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ] exp/mono0a/decode_test_yesno/wer_10_0.0

上面的内容显示在解码过程中使用了0.0,0.5,1.0 的词嵌入惩罚之后,得到的 WER 为 0,[ 0 / 232, 0 ins, 0 del, 0 sub ] 表示在 232 个测试单词上有 0 个错误,0 个错误中有 0 个是 insertion (插入错误),0 个 deletion (删除错误), 0 个 substitution (替换错误)。最后一行表示最好的测试结果出现在解码参数为 (10, 0) 组合条件下。

2.3 主脚本层面解读

主脚本非常简单,总共包含了 49 行代码。

2.3.1 训练/解码命令定义

在代码的最开始部分,定义了使用何种方式来训练和解码。

1
2
3
4
5
6
#!/usr/bin/env bash

train_cmd="utils/run.pl"
decode_cmd="utils/run.pl"
#train_cmd="utils/slurm.pl"
#decode_cmd="utils/slurm.pl"

上面的 两个变量 train_cmd 和 decode_cmd 分别定义了使用 utils/run.pl 来多任务的执行程序。执行如下命令行,

utils/run.pl JOB=1:3 ./log.JOB echo “run job JOB”

如上的命令执行了三个 echo 命令,并把屏幕上的标准输出写到 ./log.1-3 三个文件当中。其中的 log.1 日志文件如下,记录了实际命令,开始时间,屏幕输出,结束时间。

1
2
3
4
5
6
7
# echo "run job 1"
# Started at Tue Nov 23 20:54:47 EST 2021
#
run job 1
# Accounting: time=0 threads=1
# Ended (code 0) at Tue Nov 23 20:54:47 EST 2021, elapsed time 0 seconds

kaldi 的主脚本 run.sh,在模型训练和解码的过程中,分别使用了上面介绍的两个变量,

1
2
3
4
5
6
7
8
# Mono training
steps/train_mono.sh --nj 1 --cmd "$train_cmd" \
--totgauss 400 \
data/train_yesno data/lang exp/mono0a

# Decoding
steps/decode.sh --nj 1 --cmd "$decode_cmd" \
exp/mono0a/graph_tgpr data/test_yesno exp/mono0a/decode_test_yesno

2.3.2 数据获取

完成了定义训练/解码模型的方式,接下来开始下载和解压数据

1
2
3
4
5
6
7
8
9
if [ ! -d waves_yesno ]; then
wget http://www.openslr.org/resources/1/waves_yesno.tar.gz || exit 1;
# was:
# wget http://sourceforge.net/projects/kaldi/files/waves_yesno.tar.gz || exit 1;
tar -xvzf waves_yesno.tar.gz || exit 1;
fi

train_yesno=train_yesno
test_base_name=test_yesno

上面代码首先从 OpenSLR 网站上下载名为 waves_yesno.tar.gz 的文件, 然后解包到 waves_yesno 路径。该压缩文件中包含了所有建模过程中所使用到的训练及测试数据, 一共是 60 个如下 wav 格式音频数据。



图 2-2. waves_yesno 目录案例

图 2-2 中展示了解压之后文件夹 waves_yesno 下部分音频文件的文件名。这些文件均包含了 8 个以 1/0/_ 进行命名的文件,其中 1 表示 Yes, 0 表示 No, 使用下划线进行连接来表示该语音片段所包含内容的标签。

通常来说,除了需要准备音频文件外,还需提供与音频文件对齐的标注文本 (transcription),通过id来进行对齐。但是yes/no 示例中,直接使用音频对应的标注作为文件名。

2.3.3 数据整理

  1. 训练和测试数据准备

    1
    2
    # Data preparation
    local/prepare_data.sh waves_yesno

    执行上面的命令行后,会得到两个数据集,data/train_yesno 和 data/test_yesno,

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    train_yesno/
    ├── spk2utt
    ├── text
    ├── utt2dur
    ├── utt2spk
    └── wav.scp

    dev_yesno/
    ├── spk2utt
    ├── text
    ├── utt2dur
    ├── utt2spk
    └── wav.scp
  2. 人工准备资源

    在 input 下面需要一些人工准备的资源,

    1
    2
    3
    4
    5
    input/
    ├── lexicon_nosil.txt
    ├── lexicon.txt
    ├── phones.txt
    └── task.arpabo
    • lexicon.txt

      1
      2
      YES Y
      NO N
    • lexicon_nosil.txt

      1
      2
      3
      <SIL> SIL
      YES Y
      NO N
    • phones.txt

      1
      2
      3
      SIL
      Y
      N
    • task.arpabo

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      \data\
      ngram 1=4

      \1-grams:
      -1 NO
      -1 YES
      -99 <s>
      -1 </s>

      \end\
  3. 准备语言文件夹

    1
    2
    3
    4
    local/prepare_dict.sh
    utils/prepare_lang.sh --position-dependent-phones false data/local/dict "<SIL>" data/local/lang data/lang
    local/prepare_lm.sh
    echo "finished "

    前两行准备 data/lang (语言文件夹)。第三行脚本准备 lm,将 arpa 格式的 LM 转换成 WFST 的格式。

2.3.4 提取声学特征

1
2
3
4
5
6
# Feature extraction
for x in train_yesno test_yesno; do
steps/make_mfcc.sh --nj 1 data/$x exp/make_mfcc/$x mfcc
steps/compute_cmvn_stats.sh data/$x exp/make_mfcc/$x mfcc
utils/fix_data_dir.sh data/$x
done

执行了如上脚本之后,可以到 data/train_yesno 以及 data/dev_yesno 两个数据集对应的 feats.scp 文件,其中 data/train_yesno/feats.scp 文件如下,

1
2
0_0_0_0_1_1_1_1 /mnt/users/daijun_chen/gits/github/kaldi/egs/yesno/s5/mfcc/raw_mfcc_train_yesno.1.ark:16
0_0_0_1_0_0_0_1 /mnt/users/daijun_chen/gits/github/kaldi/egs/yesno/s5/mfcc/raw_mfcc_train_yesno.1.ark:8386

2.3.5 声学模型的训练

1
2
3
4
# Mono training
steps/train_mono.sh --nj 1 --cmd "$train_cmd" \
--totgauss 400 \
data/train_yesno data/lang exp/mono0a

2.3.6 构建状态图 HCLG

1
2
# Graph compilation  
utils/mkgraph.sh data/lang_test_tg exp/mono0a exp/mono0a/graph_tgpr

2.3.7 使用解码器进行解码

1
2
3
4
5
6
# Decoding
steps/decode.sh --nj 1 --cmd "$decode_cmd" \
exp/mono0a/graph_tgpr data/test_yesno exp/mono0a/decode_test_yesno

for x in exp/*/decode*; do [ -d $x ] && grep WER $x/wer_*; done
for x in exp/*/decode*; do [ -d $x ] && grep WER $x/wer_* | utils/best_wer.sh; done

输出的声学模型在路径 exp/mono0a 下面,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
mono0a/
├── 0.mdl
├── 40.mdl
├── 40.occs
├── ali.1.gz
├── cmvn_opts
├── decode_test_yesno
│   ├── lat.1.gz
│   ├── log
│   ├── num_jobs
│   ├── scoring_kaldi
│   │   ├── best_wer
│   │   ├── log
│   │   ├── penalty_0.0
│   │   │   ├── *.txt
│   │   │   └── log
│   │   ├── penalty_0.5
│   │   │   ├── *.txt
│   │   │   └── log
│   │   ├── penalty_1.0
│   │   │   ├── *.txt
│   │   │   └── log
│   │   ├── test_filt.txt
│   │   └── wer_details
│   │   ├── lmwt
│   │   ├── ops
│   │   ├── per_spk
│   │   ├── per_utt
│   │   ├── wer_bootci
│   │   └── wip
│   ├── wer_10_*.*
├── final.mdl -> 40.mdl
├── final.occs -> 40.occs
├── fsts.1.gz
├── graph_tgpr
│   ├── disambig_tid.int
│   ├── HCLG.fst
│   ├── num_pdfs
│   ├── phones
│   │   ├── align_lexicon.int
│   │   ├── align_lexicon.txt
│   │   ├── disambig.int
│   │   ├── disambig.txt
│   │   ├── optional_silence.csl
│   │   ├── optional_silence.int
│   │   ├── optional_silence.txt
│   │   └── silence.csl
│   ├── phones.txt
│   └── words.txt
├── log
├── num_jobs
├── phones.txt
└── tree

2.3.8 识别结果样例

1
2
3
4
5
6
7
1_0_0_0_0_0_0_0 YES NO NO NO NO NO NO NO
1_0_0_0_0_0_0_1 YES NO NO NO NO NO NO YES
1_0_0_0_0_0_1_1 YES NO NO NO NO NO YES YES
1_0_0_0_1_0_0_1 YES NO NO NO YES NO NO YES
1_0_0_1_0_1_1_1 YES NO NO YES NO YES YES YES
1_0_1_0_1_0_0_1 YES NO YES NO YES NO NO YES
1_0_1_1_0_1_1_1 YES NO YES YES NO YES YES YES

序列区分性训练

序列区分性训练

陈代君 - 2021

摘要:前面的章节介绍了基于极小化交叉熵 (CE) 准则的声学模型训练。本章在此基础上介绍基于极大化互信息准则的声学模型序列区分性训练,包括极大互信息准则引入的动机和优化算法。同时介绍了在实现过程中,使用的基于词格和不基于词格的两种策略。进一步,本章还介绍了一些其他序列区分性准则,同时给出了优化算法及其推导过程。最后,介绍了 Kaldi 中序列区分性准则的示例,帮助读者更好的理解序列区分性准则。

1. 生成式模型的缺陷

语音识别的本质可以用下面的公式进行描述,

其中 表示观测到的语音信号序列, 表示词序列。传统的语音识别进一步分解上面的公式 $(\ref{sec1_basic})$,

其中,分母上的 在声音信号给定后是不需要考虑的常量;分子上的 表示语言模型, 表示声学模型。 声学模型的参数 $\theta$ 通常基于训练集 进行估计,例如极大似然估计。

为了能够理解极大似然估计的缺陷,先回顾一下极大似然估计。统计的频率学派将参数 视为未知常量,在模型类型给定的基础上,基于训练数据在参数空间中寻找使得似然函数最大的 ,记为 , 这个值就是 的极大似然估计。求极大似然估计的过程中,需要给定模型类型,例如在语音识别中,通常假定模型为 GMM-HMM 或者 DNN-HMM。因为真实的语音信号并不是由 HMM 生成的,所以在 GMM-HMM 模型假设的基础上根据似然最大准则找到的最优参数并不一定使得 WER 或者 SER 最小。换句话说,似然极大并不能保证语音识别的错误率最小。

实际上, 是描述数据分布的生成式模型 (generative model),即给定词序列,假设观测到的语音信号服从 GMM-HMM 或者 DNN-HMM 模型描述的分布。不同于生成式模型,区分性模型 (discriminative model,也称为判别式模型) 直接对给定观测数据条件下真实类别的分布进行建模,即对 进行建模。

2. MMI 估计

2.1 MMI 估计的基本原理

因为语音信号随机变量 和词序列随机变量 的互信息如下,

其中, 表示词序列随机变量的熵, 表示条件为语音信号随机变量的条件熵。

因为 与待估计模型的参数无关,所以极大化互信息 等价于极小化条件熵 。极小化条件熵意味着语音信号随机变量 给定条件下,极小化词序列随机变量 的不确定性。 又因为下面的互信息表达式 $(\ref{sec2_mi})$ 中, 不含声学模型待估参数,故极大化互信息等价于极大化 $(\ref{sec2_mi})$ 右边的第一项。

基于训练集 ,可以训练极大似然声学模型 (GMM-HMM, 或 DNN-HMM) 。利用极大似然声学模型对训练集进行状态级别的对齐后,可以得到对齐后的训练集 $\mathbb{S}^{aligned}=\{(W^m,O^m,S^m)\}_{m=1}^{M}$,其中 $W^{m}=W^m_1,\cdots,W^m_{N_m}, O^m=O^m_1,\cdots,O^m_{T_m}, S^m=S^m_1,\cdots,S^m_{T_m}$。极大互信息 (MMI, maximum mutual information) 准则公式如下,

其中,分母上的 表示给定语音信号 条件下可能的词序列。例如,当正确的词序列为 “动手学语音识别”, “冻手雪余音识别” 可以作为一个可能的词序列。

为了极大化 MMI 的目标函数,可以增加分子或者减小分母 (MMI 的目标函数可以转化为似然函数乘积的形式)。 增加分子意味着提高给定正确词序列条件下观测语音信号的概率,即声学模型的概率。减小分母等同于减少错误词序列条件下观测语音的概率。综合起来看,增加正确词序列的概率和减少错误词序列的概率使得最终的 MMI 估计具有更好的区分性,最终经过区分性训练后的声学模型能够更好地识别出正确的词序列。

2.2 MMI 训练算法推导

2.2.1 GMM-HMM

理解了 MMI 的基本原理之后,还需要能够快速寻找 MMI 目标函数的优化算法。 相对于极大似然目标函数的优化来说, MMI 的目标函数的优化是更难的。总的来说,有两类算法被用来优化 MMI 的目标函数。第一类是基于梯度的优化算法,例如 GPD (Generalized Probabilistic Descent)。 第二类是更接近 EM 算法的 EB (Extended Baum-Welch) 算法。相对于基于梯度的优化算法,EB 算法具有下面的优势。

  • EB 算法利用辅助函数从理论上确保了算法的收敛和高效。
  • EB 算法可以处理 HMM 中每个状态到其他状态的转移概率求和等于 1 以及 GMM 各分量权重求和等于 1 这两个等式约束条件。

下面是 GMM-HMM 模型的 EB 算法第 步的迭代公式, 证明的细节参考附录。

其中,

上面的参数更新公式中, 的计算需要遍历所有可能的词序列。因l为所有可能的词序列数量巨大,所以直接通过上面的更新公式来求解参数的 MMI 估计几乎是不可能的。 为了克服这个计算上的困难,下面两个小节将介绍两种解决方法。

2.2.2 DNN-HMM

不同于传统的 GMM-HMM,DNN-HMM 的区分性训练主要采用了基于随机梯度下降的优化算法。假设 $y_{mt}^L=softmax(z^L_{mt})$ 是 DNN 的输出,则 MMI 的目标函数关于模型参数 $\theta$ 的梯度可以通过如下公式计算,

上面计算梯度的公式 $(\ref{sec2_dnn-hmm_grad})$ 中,$\frac{\part{z_{mt}^{L}}}{\part{\theta}}$ 只跟DNN的网络结构相关,和目标函数无关,所以仅关心目标函数关于 $z_{mt}^{L}$ 的梯度计算。为了方便,记 $e^{L}_{mt}=(e^{L}_{mt}(1),\dots, e^{L}_{mt}(n_L))^T$,其中 $e_{mt}^{L}(i)=\grad_{z_{mt}^{L}(i)}J_{MMI}(W^{m},O^{m}|\theta)$ 且 $n_L$ 表示 DNN 输出层 (第 L 层) 的节点个数。

其中,$\mathbb{1}(\cdot)$ 表示示性函数,如果自变量内条件成立,取值为 1,否则为 0;

证明见附录 7.2

2.3 Lattice-based MMI

为了加速 MMI 的计算量,早期的工作主要集中在使用 N-best 列表来近似 MMI 分母中所有可能词序列的集合。但是对于非常长的词序列,LM 计算出来的概率都接近于零,导致 N-best 中存储的备选词序列不能很好地近似分母所需的词序列集合 [Chow, 1990] 。另一种逼近 MMI 分母词序列的方案中,对每一个训练词序列生成一个 Lattice(词格),该 Lattice 将会被应用到 MMI 训练且在迭代过程不会被更新 [Povey, 2003]。

Lattice-based MMI 的具体实现步骤如下,


实现步骤

  1. 分子部分 Lattice 的构造:基于极大似然准则训练好 GMM-HMM(或基于 CE 准则训练好 DNN-HMM 模型),将训练好的模型应用到正确标准的词序列和音频信号序列上进行状态级别的对齐并生成正确词序列对应的 Lattice。
  2. 分母部分 Lattice 的构造: 利用 unigram 语言模型构建出 HCLG, 识别所有的训练例子 并保留识别过程中的 Lattice, 。 尽管在 [Povey, 2003] 文章中,主要利用 bigram 语言模型构建 HCLG,但是论文也提到利用 unigram 语言模型构建 HCLG 会得到更好的实验结果。
  3. Lattice-based MMI 的迭代训练: 对于一个训练样本
    • 基于 1. 中构造的分子 Lattice, 利用 unigram 语言模型得到正确路径的概率并计算 的前向和后向概率。
    • 基于 2. 中构造的分母 Lattice, 构造正确路径对应的竞争路径集合,并利用 unigram 语言模型计算该竞争路径的概率,类似分子部分计算每条竞争路径的概率后求和得到
    • 迭代更新模型参数至收敛,得到参数的 MMI 估计。

上面的实现步骤中,利用两个不同的模型分别对分子和分母部分构建分子 Lattice 以及分母 Lattice。其中分母 Lattice 的构造, 利用了由简单的 unigram 语言模型组成的 HCLG 有限状态转移图。在 MMI 的迭代更新过程中,分母和分子部分的计算都利用了 unigram 语言模型计算路径的概率。

下面的表格总结了 [Povey, 2003] 中报告的 Lattice-based MMI 训练过程中的各方面影响,

结论 解释
区分性训练中的语言模型 unigram 优于 bigram 和 zerogram (无语言模型) 。 尽管在某些测试集上,zerogram 模型或者按比例缩小的 unigram 模型优于 unigram, 但是会增加常用词的错误。
重新生成 Lattice 在训练 MMI 的过程中不需要更新 Lattice。 尽管在 MMI 的训练过程中,基于最新模型重新生成 Lattice 或对齐有最多 0.3% 的绝对 WER 提升,但是由于较高的计算复杂度,所以并不推荐在训练过程中更新 Lattice或对齐。
Lattice 的大小 存在一个合适的阈值,使得在不大幅减小最终 MMI 估计识别精度的前提下,可以减小 Lattice 的复杂度。 若备选路径 满足 ,则对该路径进行剪枝。实验结果表明,阈值取100 时,词错误率减小量不超过 0.2%。

2.4 Lattice-free MMI

3. 区分性准则

3.1 区分性准则的统一形式

除 MMI 目标函数 $(\ref{mmi_obj})$ 之外,区分性训练还可以使用许多其他的目标函数。实际上,这些区分性训练所使用的目标函数都基本符合如下的统一形式 $(\ref{seq_uniform_den_num})$。

统一形式 $(\ref{seq_uniform_den_num})$ 关于给定样本 $(W^m,O^m)$ 由分子和分母两部分组成。其分子上的 $J^{num}_{seq_uniform}(\cdot)$ 通常由表示正确词序列 $W^m$ 的词格计算;分母上的 $J_{seq_uniform}^{den}(\cdot)$ 通常由表示备选词序列 $W$ 的词格计算。目标函数 $J_{seq_uniform}(\mathbb{S}|\theta)$ 关于 $\theta$ 的梯度如下,

其中 $\frac{\part z_{mt}^L}{\part \theta}$ 和目标函数无关,只和使用的 DNN 网络结构相关。因此只需要考虑

不同目标函数梯度的区别主要出现在 $\gamma_{mt}^{num}(i)$ 以及 $\gamma_{mt}^{den}(i)$ 的计算上。接下来将统一的公式应用到不同的目标函数,同时给出对应的梯度。

3.2 scaled MMI

在 MMI 的目标函数中,分子和分母部分的词序列概率通常采用简单的 unigram 语言模型来近似,因为 unigram 模型忽略了词与词之间的相关性,所以导致备选词序列集合中概率高的词序列数量较少。最终导致 MMI 的目标函数不需要怎么调整声学模型参数就可以达到较大值, 但是却没有提高声学模型对于混淆路径的区分能力。为了解决混淆路径较少的问题,引入如下的 scaled MMI 目标函数,

其中 被称为尺度因子 (scale factor),

加入尺度因子之后,能够缩小备选词序列集合中词序列语言模型概率之间的差异,从而增加混淆路径的数量。使得最大化 scaled MMI 目标函数能够得到更具区分性的声学模型



图 3-1 尺度因子对词序列概率的作用

为了直观说明尺度因子 的作用,图 3-1 给出了四个不同的尺度因子条件下词序列概率 的变化。 假设 ,两条红色的水平虚线和纵轴的交点间距表示 时两个词序列概率的差;而两条蓝色的水平虚线和纵轴的交点间距表示 时两个词序列概率的差。从图 3-1 中可以看到,蓝色的交点间距明显小于红色的交点间距,所以应用更小的尺度因子可以减小词序列概率间的差异,从而增加混淆路径的数量。

在文献 [] 中,scaled MMI 的尺度因子 $\alpha$ 在目标函数分子和分母上的声学模型上。将尺度因子 $\alpha$ 放到声学模型或者语言模型的目标是相似的,都是为了增加混淆路径的数量。不同之处在于,如果将尺度因子 $\alpha$ 放到语言模型上,减小 $\alpha$ 会增加混淆路径的数量;如果将尺度因子 $\alpha$ 放到声学模型上,减小 $\alpha$ 会减少混淆路径的数量。由于将 $\alpha$ 放到声学模型或语言模型上没有本质区别,同时将 $\alpha$ 放到语言模型上会得到形式上与 MMI 相同的梯度表达式 $(\ref{sec_scaled-mmi_grad})$,所以本书将 scaled MMI 的尺度因子 $\alpha$ 放到语言模型上。

因为 scaled MMI 和 MMI 的目标函数仅在分子和分母上的语言模型有所不同,所以可以类似地求出 scaled MMI 目标函数关于参数 $\theta$ 的梯度。这里仅给出 $e_{mt}^{L}(i)=\grad_{z_{mt}^{L}(i)}J_{scaled_MMI}(W^{m},O^{m}|\theta)$ 的计算公式,

其中,

3.3 BMMI

基于 scaled MMI 目标函数,如果能够提升声学模型对于包含较多错误的路径与正确路径之间的区分度,就可以减少最终识别结果中的错误率。基于这种想法,对 scaled MMI 目标函数 $(\ref{sec_scaled_mmi_obj})$ 分母上包含错误较多的路径给予更高的权重,提出了增强的 MMI (BMMI, Boosted MMI),其目标函数如下,

其中 是尺度因子,b 是非负的增强因子 (boosting factor), 是正确文本 和备选文本 $W$ 之间的匹配程度度量,可以从词,音素和状态三个层面计算。例如考虑音素层面的匹配程度,常用已训练好的 GMM-HMM 或者 DNN-HMM 把音频信号 / 分别进行帧-音素级别的对齐,然后统计两个帧-音素对齐中结果相同的帧数。 匹配程度越高, 该备选词序列 $W$ 的重要度越低;反之 匹配程度越低,该备选词序列 $W$ 的重要度越高。最大化 BMMI 目标函数 $(\ref{sec_bmmi_obj})$,匹配程度较低的备选词序列相对于匹配程度较高的备选词序列来说,声学模型 的取值会变小。这就使得经过序列区分训练后的声学模型更倾向于选择贴近正确词序列的备选答案。

对比 scaled MMI 的目标函数,BMMI 仅在分母上的求和号中增加了增强系数 (boosting term) $\exp\{-b\cdot A(W, W^m)\}$,所以这里仅给出 $e_{mt}^{L}(i)=\grad_{z_{mt}^{L}(i)}J_{BMMI}(W^{m},O^{m}|\theta)$ 的计算公式,

其中,

为了能够快速地计算 BMMI 目标函数的梯度,需要能够快速地计算 $A(W, W^m)$。

3.4 MPE/MWE/sMBR

如果在 scaled MMI 的目标函数分子上增加权重,则引出了如下最小化贝叶斯风险 (MBR, Minimum Bayesian Risk) 目标函数族,

其中 $A(W, W^m)$ 和在 BMMI 中的含义相同。需要特别注意上面的目标函数 $(\ref{sec_mbr_obj})$ 是 M 个训练样本对应的概率求和,而不是取了对数之后再求和。

如果公式 $(\ref{sec_mbr_obj})$ 中的 度量的是正确文本 和备选文本 之间音素级别的匹配程度,则该目标函数被称为最小化音素错误 ( MPE,Minimum Phone Error) ;如果 度量的是正确文本 和备选文本 对齐后正确词 (字) 的个数,则该目标函数被称为最小化词错误 (MWE,Minimum Word Error) 。文本之间的对齐可以参考编辑距离或 WER 的计算;如果 度量的是正确文本 和备选文本 在状态级别的匹配程度,即利用训练好的 GMM-HMM 或者 DNN-HMM 对音频信号 / 分别进行帧-状态级别的对齐,然后统计两个帧-状态对齐中结果相同的帧数, 则该目标函数被称为状态级的最小贝叶斯风险 (sMBR,state-Minimum Bayesian Risk)。

不论是 MPE,MWE 或者 sMBR, 都是给予了和正确文本更相似的备选文本较高的权重,优化目标函数之后得到的声学模型 将在相似度较高的文本上给予更高的声学得分,而在相似度较低的文本上给予更低的声学得分。

对比 MPE 和 MWE 的目标函数,理论上,当训练数据量趋于无穷, MWE 的目标函数应该逼近模型的泛化 WER, 所以最小化 MWE 的目标函数应该和最小化 WER 的目标更匹配。 但是,实验结果表明,在多数的训练集上进行序列区分性训练之后,MPE 在测试集上的表现比 MWE 的更好一些 [Povey, 2003]。

类似于 BMMI,下面给出了 $e_{mt}^L(i)$ 的计算公式,

其中,

证明的细节参考附录 7.3

3.5. 训练准则的比较

介绍了前面的序列判别式训练的准则,到底实践当 中应该选择什么样的准则呢? 在文献 [] 中分别使用了不同的训练准则来训练模型,结果显示使用不同的序列区分性训练准则进行训练得到的模型在测试集上结果并没有很大的差异。从 SWB Hub5‘00 和 Hub5’01 两个测试集上的 WER 来看,DNN + sMBR 的结果相对来说更好一些。但是由于 MMI 和 scaled MMI 更容易被理解和实现,所以实际中使用较多,例如 chain 模型就主要使用 MMI 准则进行优化。

4. Kaldi 实现

5. 本章小结

本章

6. 参考资料

1

7. 附录

7.1

7.2

对等式 $(\ref{append2_emtl})$ 求和号中的两项分别进行求解。首先 ,求解第一项

求解等式 $(\ref{append2_mmi_sub})$ 中第一项可得,

求解等式 $(\ref{append2_mmi_sub})$ 中第二项可得,

综合 $(\ref{append2_mmi_sub1})$ 和 $(\ref{append2_mmi_sub2})$,可知,

其次求解 $(\ref{append2_emtl})$ 求和号中的第二项,

综合 $(\ref{append2_mmi_part1})$ 和 $(\ref{append2_mmi_part2})$ 的结果,最后可得

</a>

7.3

分别对等式 $(\ref{mbr_grad})$ 右边求和号中的两项分别进行求解。首先求解第一项,

继续对上面的等式 $(\ref{mbr_grad_part1_1})$ 括号中的两项进行求解,其中的第一项为,

第二项为,

综合等式 $(\ref{mbr_grad_part1_1_1})$ 和 $(\ref{mbr_grad_part1_1_2})$, 可得

其中

最终得到如下结果,

其中,$\gamma_{mt}^{den}(r)=\frac{\sum_{W}\mathbb{P}(O^m|W,\theta)\mathbb{P}(W)^{\alpha}\mathbb{1}(S_t=r)}{\sum_{W}\mathbb{P}(O^m|W,\theta)\mathbb{P}(W)^{\alpha}}$,式 $(\ref{mbr_grad_result})$ 得证。

</a>

Text Formatting

Regular, bold, italic, strike, ==hightlight==, inline-code,*emphasis^,,

Cites

[Povey ]

Code:

1
2
import someCode from 'someLibrary';

This is a link

Footnote

Wome thing

upper scripts

Example^1^

Example~2~

  • Copyrights © 2015-2022 Daijun Chen
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信